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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="lgp" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  lgp
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="drolll" data-post="21" data-topic="46394">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/d/d26b3c/48.png" class="avatar"> drolll:</div>
<blockquote>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule JsonAPI do
  @c %{"posts"=&gt;100,"comments"=&gt;500,"albums"=&gt;100,"photos"=&gt;5000,"todos"=&gt;200,"users"=&gt;10}
  @b "https://jsonplaceholder.typicode.com/"

  def query(c, id \\ 0, keys \\ []),       do: chk_input(c, id) |&gt; request({c, id, keys})

  defp chk_input(c, id) ,                  do: is_cat(c in Map.keys(@c), c, id)

  defp is_cat(true, c, id),                do: in_range(id &lt;= @c[c], c)
  defp is_cat(_,    c, _ ),                do: {:error, "'#{c}' is invalid"}

  defp in_range(true, _ ),                 do: :ok
  defp in_range( _  , c ),                 do: {:error, "'#{c}' max id: #{@c[c]}"}

  defp request(:ok, {c, id, keys}),        do: lookup(c, id) |&gt; reply(keys)
  defp request({:error, msg},  _   ),      do: msg

  defp lookup(c, 0),                       do: HTTPoison.get("#{@b}#{c}")
  defp lookup(c, i),                       do: HTTPoison.get("#{@b}#{c}/#{to_string(i)}")

  defp reply({:error, reason }, _ ),              do: {:error,    reason}
  defp reply({_,%{status_code: 200,body: b}},[]), do: {:ok,       parse(b) }
  defp reply({_,%{status_code: 200,body: b}},k),  do: {:ok,       parse(b) |&gt; get_in(k) }
  defp reply({_,%{status_code:  s, body: b}},_),  do: {:error, s, parse(b) |&gt; get_in(["message"])}

  defp parse(body),                        do: Poison.Parser.parse!(body, %{})

  end
</code></pre>
</blockquote>
</aside>
<p>Much nicer!!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="245195" 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/how-do-i-clean-up-this-code-from-an-example-in-the-pragprog-elixir-course/46394/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-245195" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="245195"
                     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 #21"></div>
  </section>
</div>
    <div class="postbit" id="245208" data-post-id="245208">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="drolll" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  drolll
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>One more cleanup tweak:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule JsonAPI do
  @c %{"posts"=&gt;100,"comments"=&gt;500,"albums"=&gt;100,"photos"=&gt;5000,"todos"=&gt;200,"users"=&gt;10}
  @b "https://jsonplaceholder.typicode.com/"

  def query(c, id \\ 0, keys \\ []), do: chk_input(c, id) |&gt; request({c, id, keys})

  defp chk_input(c, id),             do: is_cat(c in Map.keys(@c), c, id)

  defp is_cat(true, c, id),          do: in_range(id &lt;= @c[c], c)
  defp is_cat(_,    c, _ ),          do: {:error, "'#{c}' is invalid"}
  defp in_range(true, _ ),           do: :ok
  defp in_range( _  , c ),           do: {:error, "#{c} max id: #{@c[c]}"}

  defp request( :ok, {c, id, keys}), do: lookup(c, id) |&gt; reply(keys)
  defp request({:error, msg},  _  ), do: msg

  defp lookup(c, 0),                 do: HTTPoison.get("#{@b}#{c}")
  defp lookup(c, i),                 do: HTTPoison.get("#{@b}#{c}/#{to_string(i)}")

  defp reply({:error, reason }, _ ),              do: {:error,  reason}
  defp reply({_,%{status_code: 200,body: b}},[]), do: {:ok,     parse(b) }
  defp reply({_,%{status_code: 200,body: b}},k),  do: {:ok,     filter(b, k) }
  defp reply({_,%{status_code:  s, body: b}},_),  do: {:error,s,filter(b,["message"])}

  defp filter(body, keys),           do: parse(body) |&gt; get_in(keys)
  defp parse(body),                  do: Poison.Parser.parse!(body, %{})
  end
</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="245208" 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/how-do-i-clean-up-this-code-from-an-example-in-the-pragprog-elixir-course/46394/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-245208" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="245208"
                     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 #22"></div>
  </section>
</div>
    <div class="postbit" id="245210" data-post-id="245210">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="lgp" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  lgp
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Very nice indeed. Gives a whole new aspect to the problem.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="245210" 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/how-do-i-clean-up-this-code-from-an-example-in-the-pragprog-elixir-course/46394/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-245210" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="245210"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>