<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="140744" data-post-id="140744">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="akoutmos" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/akoutmos/120/20230_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  akoutmos
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Build a Weather Station with Elixir and Nerves</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I am in the process of putting together a in depth 2 part blog series on setting up Prometheus and Grafana along side a PostGIS powered Phoenix application. I published Part 1 yesterday: <a href="https://akoutmos.com/post/prometheus-postgis-and-phoenix/" class="inline-onebox" rel="noopener nofollow ugc">Prometheus, PostGIS and Phoenix Part 1-Alex Koutmos | Engineering Blog</a></p>
<p>Stay tuned for part 2!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="140744" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-blog-posts/150/523">Post #522</a>
	                </div>
	            </div>
              <div id="likers-container-140744" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="140744"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #522"></div>
  </section>
</div>
    <div class="postbit" id="140843" data-post-id="140843">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="grufino" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/grufino/120/13234_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  grufino
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hey! I wrote a post on my first experience with Property based tests in Elixir… It was my first medium post so feedback is very appreciated, hope u like it!</p>
<p><a href="https://medium.com/@grufino1/my-take-on-property-based-testing-in-elixir-1a3b1c18212b" class="onebox" target="_blank" rel="noopener nofollow ugc">https://medium.com/@grufino1/my-take-on-property-based-testing-in-elixir-1a3b1c18212b</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="140843" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-blog-posts/150/524">Post #523</a>
	                </div>
	            </div>
              <div id="likers-container-140843" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="140843"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #523"></div>
  </section>
</div>
    <div class="postbit" id="140883" data-post-id="140883">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="OvermindDL1" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/OvermindDL1/120/2677_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  OvermindDL1
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/grufino" rel="nofollow">@grufino</a> I liked reading it, easy to follow and understand.  <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="140883" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-blog-posts/150/525">Post #524</a>
	                </div>
	            </div>
              <div id="likers-container-140883" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="140883"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #524"></div>
  </section>
</div>
    <div class="postbit" id="140983" data-post-id="140983">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="blackode" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/blackode/120/21060_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  blackode
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h4><a name="p-140983-a-definite-guide-on-1" class="anchor" href="#p-140983-a-definite-guide-on-1" aria-label="Heading link" rel="nofollow"></a>A definite Guide On</h4>
<h1><a name="p-140983-h-10-common-code-refactoring-elixir-2" class="anchor" href="#p-140983-h-10-common-code-refactoring-elixir-2" aria-label="Heading link" rel="nofollow"></a>10 Common Code Refactoring | Elixir</h1>
<p><a href="https://medium.com/blackode/elixir-code-refactoring-techniques-33589ac56231" rel="noopener nofollow ugc"><img src="https://miro.medium.com/max/1920/1*ja1A3UA_5SgPc0mDSl8ZNg.png" alt="Image" width="690" height="388"></a></p>
<p>This article comprises of common Elixir coding techniques that you may or may not know.</p>
<h2><a name="p-140983-a-jist-of-the-article-3" class="anchor" href="#p-140983-a-jist-of-the-article-3" aria-label="Heading link" rel="nofollow"></a>A Jist of the Article</h2>
<p>We usually encounter a situation like we expect a map has certain key and if not we need to send some default value.</p>
<p>Immediately, we will end up using <code>Map.has_key?</code> like in the following way</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">currency = 
  if(Map.has_key? price, "currency") do
    price["currency"]
  else
    "USD"
</code></pre>
<p>If you see any such lines in your code then it is time to refactor them as</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">currency = Map.get(price, "currency", "USD")
</code></pre>
<p>However, you can also take this to the next level like</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">currency = price["currency"] || "USD"
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="140983" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-blog-posts/150/526">Post #525</a>
	                </div>
	            </div>
              <div id="likers-container-140983" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="140983"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #525"></div>
  </section>
</div>
    <div class="postbit" id="141198" data-post-id="141198">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="hauleth" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hauleth/120/18942_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  hauleth
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="blackode" data-post="526" data-topic="150">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/blackode/48/21060_2.png" class="avatar"> blackode:</div>
<blockquote>
<p>Immediately, we will end up using <code>Map.has_key?</code> like in the following way</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">currency = 
  if(Map.has_key? price, "currency") do
    price["currency"]
  else
    "USD"
</code></pre>
<p>If you see any such lines in your code then it is time to refactor them as</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">currency = Map.get(price, "currency", "USD")
</code></pre>
<p>However, you can also take this to the next level like</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">currency = price["currency"] || "USD"
</code></pre>
</blockquote>
</aside>
<p>Except these will not work in the same way when <code>price = %{"currency" =&gt; nil}</code>, and this is an important difference.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="141198" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-blog-posts/150/527">Post #526</a>
	                </div>
	            </div>
              <div id="likers-container-141198" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="141198"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #526"></div>
  </section>
</div>
    <div class="postbit" id="141298" data-post-id="141298">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="gregvaughn" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/gregvaughn/120/954_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  gregvaughn
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<pre data-code-wrap="updated_pickup"><code class="lang-updated_pickup">  Enum.map(pickup, fn 
    {"latitude", lat} -&gt; {"lat", lat}
    {"longitude", long} -&gt; {"long", long}
    {"pickupId", pickup_id} -&gt; {"pickup_id", pickup_id}
    {"stopName", stop_name} -&gt; {"stop_name", stop_name}
    {"zip", zip} -&gt; {"zipcode", zip}
    anything -&gt; anything 
  end)
  |&gt; Enum.into(%{})
</code></pre>
<p>Every time someone does <code>Enum.map(map, function) |&gt; Enum.into(%{})</code> <code>Map.new/2</code> cries. <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="141298" data-batch-url="/posts/batch_likers">
                        11
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-blog-posts/150/528">Post #527</a>
	                </div>
	            </div>
              <div id="likers-container-141298" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="141298"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #527"></div>
  </section>
</div>
    <div class="postbit" id="141390" data-post-id="141390">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="blackode" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/blackode/120/21060_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  blackode
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="hauleth" data-post="527" data-topic="150">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hauleth/48/18942_2.png" class="avatar"> hauleth:</div>
<blockquote>
<p>Except these will not work in the same way when <code>price = %{"currency" =&gt; nil}</code> , and this is an important difference</p>
</blockquote>
</aside>
<p>Of course you are right. I just considered no-key and key with value as <code>nil</code> are both same. I will update like you said.<br>
Anyway, Good Catch <img src="https://forum.elixirforum.com/images/emoji/apple/tada.png?v=15" title=":tada:" class="emoji" alt=":tada:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="141390" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-blog-posts/150/529">Post #528</a>
	                </div>
	            </div>
              <div id="likers-container-141390" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="141390"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #528"></div>
  </section>
</div>
    <div class="postbit" id="141393" data-post-id="141393">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="blackode" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/blackode/120/21060_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  blackode
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="gregvaughn" data-post="528" data-topic="150">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/gregvaughn/48/954_2.png" class="avatar"> gregvaughn:</div>
<blockquote>
<p>Every time someone does <code>Enum.map(map, function) |&gt; Enum.into(%{})</code> <code>Map.new/2</code> cries. <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" loading="lazy" width="20" height="20"></p>
</blockquote>
</aside>
<p>Yeah. I have to cry now <img src="https://forum.elixirforum.com/images/emoji/apple/cry.png?v=15" title=":cry:" class="emoji" alt=":cry:" loading="lazy" width="20" height="20">.</p>
<p>I was using before as I don’t have an idea of using <code>Map.new/2</code>. If I have to work on any Enumerable data, Immediately mind goes for <code>Enum</code> module.</p>
<p>Thanks for reading and update. I’ll update it in the article.</p>
<p>TIL</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="141393" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-blog-posts/150/530">Post #529</a>
	                </div>
	            </div>
              <div id="likers-container-141393" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="141393"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #529"></div>
  </section>
</div>
    <div class="postbit" id="141858" data-post-id="141858">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mischov" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mischov/120/2489_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mischov
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Nice blog post about using Pow for an API.</p>
<p><a href="https://experimentingwithcode.com/phoenix-api-authentication-with-pow/" class="inline-onebox" rel="noopener nofollow ugc">Phoenix API Authentication with Pow</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="141858" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-blog-posts/150/531">Post #530</a>
	                </div>
	            </div>
              <div id="likers-container-141858" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="141858"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #530"></div>
  </section>
</div>
    <div class="postbit" id="142232" data-post-id="142232">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="SmartLogic" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/SmartLogic/120/14007_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  SmartLogic
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a href="https://blog.smartlogic.io/smartlogic-at-elixirconf19/" rel="noopener nofollow ugc">ElixirConf Highlights</a> from the SmartLogic team; our favorite talks, hallway conf moments, and more.</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://smartlogic.io/blog/smartlogic-at-elixirconf19/">
  <header class="source">
      <img src="https://smartlogic.io/blog/favicon.png" class="site-icon" alt="" width="75" height="75">

      <a href="https://smartlogic.io/blog/smartlogic-at-elixirconf19/" target="_blank" rel="noopener nofollow ugc" title="07:50PM - 03 September 2019">SmartLogic Blog – 3 Sep 19</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/919;"><img src="https://smartlogic.io/blog/content/images/2019/09/Image-from-iOS.jpg" class="thumbnail" alt="" width="690" height="920"></div>

<h3><a href="https://smartlogic.io/blog/smartlogic-at-elixirconf19/" target="_blank" rel="noopener nofollow ugc">ElixirConf 2019 Highlights</a></h3>

  <p>Last week half of our team headed out to Colorado for ElixirConf 2019, for training, talks, emceeing, networking, and more. Some of our Favorite TalksJohanna Larsson, High Performance String Processing Scripts in Elixir Eric used what he learned in...</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="142232" data-batch-url="/posts/batch_likers">
                        5
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-blog-posts/150/532">Post #531</a>
	                </div>
	            </div>
              <div id="likers-container-142232" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="142232"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #531"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/150/load_more?page=50">Load more posts (731 remaining)</a>
</div></template></turbo-stream>