Deduplicate generation path prefixes
This commit is contained in:
1
AUDIT.md
1
AUDIT.md
@@ -24,6 +24,7 @@ after each item.
|
|||||||
- [x] `generation/outputs.ex`
|
- [x] `generation/outputs.ex`
|
||||||
- [x] `generation/sitemap.ex`
|
- [x] `generation/sitemap.ex`
|
||||||
- [x] `generation/data.ex`
|
- [x] `generation/data.ex`
|
||||||
|
- [x] `generation/paths.ex`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -17,13 +17,9 @@ defmodule BDS.Generation.Paths do
|
|||||||
month = month |> Integer.to_string() |> String.pad_leading(2, "0")
|
month = month |> Integer.to_string() |> String.pad_leading(2, "0")
|
||||||
day = day |> Integer.to_string() |> String.pad_leading(2, "0")
|
day = day |> Integer.to_string() |> String.pad_leading(2, "0")
|
||||||
|
|
||||||
path_parts = [year, month, day, post.slug, "index.html"]
|
language
|
||||||
|
|> maybe_prepend_language([year, month, day, post.slug, "index.html"])
|
||||||
case language do
|
|> Path.join()
|
||||||
nil -> Path.join(path_parts)
|
|
||||||
"" -> Path.join(path_parts)
|
|
||||||
value -> Path.join([value | path_parts])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec paginated_archive_paths(language(), [String.t()], non_neg_integer(), pos_integer()) ::
|
@spec paginated_archive_paths(language(), [String.t()], non_neg_integer(), pos_integer()) ::
|
||||||
@@ -46,22 +42,15 @@ defmodule BDS.Generation.Paths do
|
|||||||
end
|
end
|
||||||
|
|
||||||
@spec root_output_path(language(), pos_integer()) :: String.t()
|
@spec root_output_path(language(), pos_integer()) :: String.t()
|
||||||
def root_output_path(nil, 1), do: "index.html"
|
|
||||||
def root_output_path("", 1), do: "index.html"
|
|
||||||
def root_output_path(route_language, 1), do: Path.join(route_language, "index.html")
|
|
||||||
|
|
||||||
def root_output_path(nil, page_number),
|
|
||||||
do: Path.join(["page", Integer.to_string(page_number), "index.html"])
|
|
||||||
|
|
||||||
def root_output_path("", page_number), do: root_output_path(nil, page_number)
|
|
||||||
|
|
||||||
def root_output_path(route_language, page_number),
|
def root_output_path(route_language, page_number),
|
||||||
do: Path.join([route_language, "page", Integer.to_string(page_number), "index.html"])
|
do:
|
||||||
|
route_language
|
||||||
|
|> maybe_prepend_language(root_output_path_segments(page_number))
|
||||||
|
|> Path.join()
|
||||||
|
|
||||||
@spec page_output_path(String.t(), language()) :: String.t()
|
@spec page_output_path(String.t(), language()) :: String.t()
|
||||||
def page_output_path(slug, nil), do: Path.join([slug, "index.html"])
|
def page_output_path(slug, language),
|
||||||
def page_output_path(slug, ""), do: page_output_path(slug, nil)
|
do: language |> maybe_prepend_language([slug, "index.html"]) |> Path.join()
|
||||||
def page_output_path(slug, language), do: Path.join([language, slug, "index.html"])
|
|
||||||
|
|
||||||
@spec pagination_for_page(
|
@spec pagination_for_page(
|
||||||
pos_integer(),
|
pos_integer(),
|
||||||
@@ -102,21 +91,11 @@ defmodule BDS.Generation.Paths do
|
|||||||
do: archive_href(route_language, segments, page_number)
|
do: archive_href(route_language, segments, page_number)
|
||||||
|
|
||||||
@spec root_page_href(language(), integer()) :: String.t()
|
@spec root_page_href(language(), integer()) :: String.t()
|
||||||
def root_page_href(route_language, page_number) when page_number <= 1 do
|
def root_page_href(route_language, page_number) when page_number <= 1,
|
||||||
case route_language do
|
do: language_route_prefix(route_language) <> "/"
|
||||||
nil -> "/"
|
|
||||||
"" -> "/"
|
|
||||||
language -> "/#{language}/"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def root_page_href(route_language, page_number) do
|
def root_page_href(route_language, page_number) do
|
||||||
base =
|
base = language_route_prefix(route_language)
|
||||||
case route_language do
|
|
||||||
nil -> ""
|
|
||||||
"" -> ""
|
|
||||||
language -> "/#{language}"
|
|
||||||
end
|
|
||||||
|
|
||||||
"#{base}/page/#{page_number}/"
|
"#{base}/page/#{page_number}/"
|
||||||
end
|
end
|
||||||
@@ -160,13 +139,8 @@ defmodule BDS.Generation.Paths do
|
|||||||
end
|
end
|
||||||
|
|
||||||
@spec archive_path(language(), [String.t()]) :: String.t()
|
@spec archive_path(language(), [String.t()]) :: String.t()
|
||||||
def archive_path(nil, segments), do: Path.join(segments ++ ["index.html"])
|
def archive_path(language, segments),
|
||||||
def archive_path("", segments), do: Path.join(segments ++ ["index.html"])
|
do: language |> maybe_prepend_language(segments ++ ["index.html"]) |> Path.join()
|
||||||
|
|
||||||
def archive_path(language, segments) do
|
|
||||||
prefix = if language in [nil, ""], do: [], else: [language]
|
|
||||||
Path.join(prefix ++ segments ++ ["index.html"])
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec archive_route_segment(any()) :: String.t()
|
@spec archive_route_segment(any()) :: String.t()
|
||||||
def archive_route_segment(nil), do: ""
|
def archive_route_segment(nil), do: ""
|
||||||
@@ -271,6 +245,15 @@ defmodule BDS.Generation.Paths do
|
|||||||
@spec truthy_flag?(term()) :: boolean()
|
@spec truthy_flag?(term()) :: boolean()
|
||||||
def truthy_flag?(value), do: value not in [false, nil]
|
def truthy_flag?(value), do: value not in [false, nil]
|
||||||
|
|
||||||
|
defp root_output_path_segments(1), do: ["index.html"]
|
||||||
|
defp root_output_path_segments(page_number), do: ["page", Integer.to_string(page_number), "index.html"]
|
||||||
|
|
||||||
|
defp maybe_prepend_language(language, segments) when language in [nil, ""], do: segments
|
||||||
|
defp maybe_prepend_language(language, segments), do: [language | segments]
|
||||||
|
|
||||||
|
defp language_route_prefix(language) when language in [nil, ""], do: ""
|
||||||
|
defp language_route_prefix(language), do: "/#{language}"
|
||||||
|
|
||||||
@doc "Returns the local-time `{year, month, day}` for a unix-ms-or-binary timestamp."
|
@doc "Returns the local-time `{year, month, day}` for a unix-ms-or-binary timestamp."
|
||||||
@spec local_date_parts!(term()) :: {integer(), integer(), integer()}
|
@spec local_date_parts!(term()) :: {integer(), integer(), integer()}
|
||||||
def local_date_parts!(value) do
|
def local_date_parts!(value) do
|
||||||
|
|||||||
Reference in New Issue
Block a user