Merge branch 'main' of ssh://gitea.apps.sustainabledelivery.com:3022/mostalive/firehose
This commit is contained in:
@@ -55,6 +55,18 @@ defmodule FirehoseWeb.MicroprintsLive do
|
||||
</h3>
|
||||
|
||||
<%= if microprint do %>
|
||||
<button
|
||||
phx-click="toggle_expand"
|
||||
phx-value-path={path}
|
||||
class="btn btn-xs btn-ghost w-full"
|
||||
>
|
||||
<%= if @expanded_path == path do %>
|
||||
Collapse
|
||||
<% else %>
|
||||
Expand
|
||||
<% end %>
|
||||
</button>
|
||||
|
||||
<.microprint
|
||||
microprint={microprint}
|
||||
width={200}
|
||||
@@ -64,23 +76,12 @@ defmodule FirehoseWeb.MicroprintsLive do
|
||||
highlighted_line={@highlighted_line}
|
||||
/>
|
||||
|
||||
<button
|
||||
phx-click="toggle_expand"
|
||||
phx-value-path={path}
|
||||
class="btn btn-xs btn-ghost mt-2 w-full"
|
||||
>
|
||||
<%= if @expanded_path == path do %>
|
||||
Collapse
|
||||
<% else %>
|
||||
Expand
|
||||
<% end %>
|
||||
</button>
|
||||
|
||||
<%= if @expanded_path == path and source do %>
|
||||
<.source_viewer
|
||||
content={source}
|
||||
highlighted_line={@highlighted_line}
|
||||
language="elixir"
|
||||
id={"source-viewer-" <> path}
|
||||
/>
|
||||
<% end %>
|
||||
<% else %>
|
||||
@@ -123,25 +124,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.expand(Path.join(app_root, path))
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user