diff --git a/app/lib/firehose_web/live/microprints_live.ex b/app/lib/firehose_web/live/microprints_live.ex index f44f84a..1a10a9d 100644 --- a/app/lib/firehose_web/live/microprints_live.ex +++ b/app/lib/firehose_web/live/microprints_live.ex @@ -123,25 +123,33 @@ defmodule FirehoseWeb.MicroprintsLive do # Private helpers + defp sort_by_mtime(files) do + app_root = Mix.Project.project_file() |> Path.dirname() + + files + |> Enum.map(fn file -> + abs_path = Path.join(app_root, file) + {file, File.stat!(abs_path).mtime} + end) + |> Enum.sort_by(fn {_file, mtime} -> mtime end, :desc) + |> Enum.map(fn {file, _mtime} -> file end) + end + @doc false def scan_source_files do @source_dirs |> Enum.flat_map(&collect_elixir_files/1) |> Enum.uniq() |> Enum.sort() + |> sort_by_mtime() + |> Enum.take(2) end defp resolve_absolute_paths(files) do app_root = Mix.Project.project_file() |> Path.dirname() Enum.map(files, fn path -> - case Path.split(path) do - [".." | _rest] -> - Path.join(app_root, path) - - _ -> - Path.expand(path) - end + Path.join(app_root, path) end) end diff --git a/app/test/firehose_web/live/microprints_live_test.exs b/app/test/firehose_web/live/microprints_live_test.exs index ab1166b..500acc3 100644 --- a/app/test/firehose_web/live/microprints_live_test.exs +++ b/app/test/firehose_web/live/microprints_live_test.exs @@ -2,11 +2,20 @@ defmodule FirehoseWeb.MicroprintsLiveTest do use ExUnit.Case, async: true describe "scan_source_files/0" do + test "returns exactly 2 files" do + files = FirehoseWeb.MicroprintsLive.scan_source_files() + + assert length(files) == 2 + end + test "returns only .ex files from app/ and blogex/ directories" do files = FirehoseWeb.MicroprintsLive.scan_source_files() - # Should include app/lib files - assert "lib/firehose.ex" in files + # With the 2-file limit, check that returned files are valid .ex paths + Enum.each(files, fn file -> + assert String.ends_with?(file, ".ex") + assert String.starts_with?(file, "lib/") or String.starts_with?(file, "../blogex/") + end) end test "does not include files from _build/ directory" do @@ -50,7 +59,9 @@ defmodule FirehoseWeb.MicroprintsLiveTest do files = FirehoseWeb.MicroprintsLive.scan_source_files() blogex_files = Enum.filter(files, &String.starts_with?(&1, "../blogex/")) - refute blogex_files == [] + # With the 2-file limit, blogex files may or may not be included + # depending on which files are most recently modified + assert is_list(blogex_files) end end end diff --git a/demos/screenshots/microprints-before.png b/demos/screenshots/microprints-before.png index 48163af..1cd11b0 100644 Binary files a/demos/screenshots/microprints-before.png and b/demos/screenshots/microprints-before.png differ