diff --git a/lib/archivist/archive.ex b/lib/archivist/archive.ex index 95febd4..4ffa05f 100644 --- a/lib/archivist/archive.ex +++ b/lib/archivist/archive.ex @@ -37,6 +37,7 @@ defmodule Archivist.Archive do @defaults [ content_dir: "priv/articles", match_pattern: "**/*.ad", + article_sorter: &(&1[:published_at] >= &2[:published_at]), content_parser: Earmark, article_parser: Arcdown ] @@ -55,6 +56,7 @@ defmodule Archivist.Archive do content_dir = settings[:content_dir] match_pattern = settings[:match_pattern] + article_sorter = settings[:article_sorter] article_paths = Parser.get_paths(content_dir, match_pattern) parsed_articles = Parser.parse_files(article_paths) @@ -75,7 +77,7 @@ defmodule Archivist.Archive do def articles do unquote valid_articles - |> Enum.to_list + |> Enum.sort(article_sorter) |> Macro.escape end diff --git a/lib/archivist/parsers/article_parser.ex b/lib/archivist/parsers/article_parser.ex index 8db2246..d99978c 100644 --- a/lib/archivist/parsers/article_parser.ex +++ b/lib/archivist/parsers/article_parser.ex @@ -23,16 +23,16 @@ defmodule Archivist.ArticleParser do def parse_attrs(attr, articles) do articles |> Stream.flat_map(fn article -> Map.get(article, attr) end) - |> sanitize_parsed + |> sanitize_attrs end def parse_attr(attr, articles) do articles |> Stream.map(fn article -> Map.get(article, attr) end) - |> sanitize_parsed + |> sanitize_attrs end - defp sanitize_parsed(parsed_vals) do + defp sanitize_attrs(parsed_vals) do parsed_vals |> Stream.reject(&is_nil/1) |> Stream.uniq