From 3a1fcfb3c3eb2a39dc5088a939ba1e6910ead417 Mon Sep 17 00:00:00 2001 From: Adam Piontek Date: Wed, 7 Apr 2021 14:22:11 -0400 Subject: [PATCH] fix blog listing of published (not future) posts --- lib/home73k/blog.ex | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/home73k/blog.ex b/lib/home73k/blog.ex index e1cbee8..ebf13f1 100644 --- a/lib/home73k/blog.ex +++ b/lib/home73k/blog.ex @@ -22,26 +22,25 @@ defmodule Home73k.Blog do end @posts Enum.sort_by(posts, & &1.date, {:desc, NaiveDateTime}) - @post_count length(@posts) - - + # Private function to list all posts defp list_all_posts, do: @posts - defp list_posts_reject_future, do: list_all_posts() |> Enum.reject(&(&1.date <= NaiveDateTime.utc_now())) - # Enum reject posts with future date, allowing scheduled posts - def list_posts, do: list_posts_reject_future() - # List tags, but not for future p + # List only published (not in future) posts + def list_posts, do: list_all_posts() |> Enum.reject(&post_in_future?/1) + + # List tags, but only for published (not in future) posts def list_tags do list_all_posts() - |> Stream.reject(&(&1.date <= NaiveDateTime.utc_now())) + |> Stream.reject(&post_in_future?/1) |> Stream.flat_map(& &1.tags) |> Stream.uniq() |> Enum.sort() end - def post_count, do: @post_count + # Count of published (not in future) posts + def post_count, do: list_posts() |> length() defmodule NotFoundError do defexception [:message, plug_status: 404] @@ -60,4 +59,9 @@ defmodule Home73k.Blog do posts -> posts end end + + # check if post date is in future + defp post_in_future?(post) do + NaiveDateTime.compare(post.date, NaiveDateTime.utc_now()) == :gt + end end