Simplify rendering path builders
This commit is contained in:
1
AUDIT.md
1
AUDIT.md
@@ -19,6 +19,7 @@ after each item.
|
|||||||
- [x] `rendering/list_archive.ex`
|
- [x] `rendering/list_archive.ex`
|
||||||
- [x] `rendering/template_selection.ex`
|
- [x] `rendering/template_selection.ex`
|
||||||
- [x] `rendering/metadata.ex`
|
- [x] `rendering/metadata.ex`
|
||||||
|
- [x] `rendering/links_and_languages.ex`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -41,15 +41,8 @@ defmodule BDS.Rendering.LinksAndLanguages do
|
|||||||
def canonical_media_path_by_source_path(project_id) do
|
def canonical_media_path_by_source_path(project_id) do
|
||||||
Repo.all(from media in MediaAsset, where: media.project_id == ^project_id)
|
Repo.all(from media in MediaAsset, where: media.project_id == ^project_id)
|
||||||
|> Enum.reduce(%{}, fn media, acc ->
|
|> Enum.reduce(%{}, fn media, acc ->
|
||||||
datetime = Persistence.from_unix_ms!(media.created_at)
|
|
||||||
|
|
||||||
source_key =
|
source_key =
|
||||||
Path.join([
|
Path.join(["media" | year_month_path_parts(media.created_at)] ++ [media.original_name])
|
||||||
"media",
|
|
||||||
Integer.to_string(datetime.year),
|
|
||||||
String.pad_leading(Integer.to_string(datetime.month), 2, "0"),
|
|
||||||
media.original_name
|
|
||||||
])
|
|
||||||
|> String.downcase()
|
|> String.downcase()
|
||||||
|
|
||||||
Map.put(acc, source_key, Path.join("/", media.file_path))
|
Map.put(acc, source_key, Path.join("/", media.file_path))
|
||||||
@@ -57,24 +50,8 @@ defmodule BDS.Rendering.LinksAndLanguages do
|
|||||||
end
|
end
|
||||||
|
|
||||||
@spec post_path(map(), String.t() | nil) :: String.t()
|
@spec post_path(map(), String.t() | nil) :: String.t()
|
||||||
def post_path(post, language_prefix)
|
def post_path(post, language_prefix),
|
||||||
when is_binary(language_prefix) and language_prefix != "" do
|
do: normalize_language_prefix(language_prefix) <> base_post_path(post)
|
||||||
String.trim_trailing(language_prefix, "/") <> post_path(post, nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
def post_path(post, ""), do: post_path(post, nil)
|
|
||||||
|
|
||||||
def post_path(post, nil) do
|
|
||||||
datetime = Persistence.from_unix_ms!(post.created_at)
|
|
||||||
|
|
||||||
Path.join([
|
|
||||||
"/",
|
|
||||||
Integer.to_string(datetime.year),
|
|
||||||
String.pad_leading(Integer.to_string(datetime.month), 2, "0"),
|
|
||||||
String.pad_leading(Integer.to_string(datetime.day), 2, "0"),
|
|
||||||
post.slug
|
|
||||||
]) <> "/"
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec post_path(map(), String.t() | nil, String.t()) :: String.t()
|
@spec post_path(map(), String.t() | nil, String.t()) :: String.t()
|
||||||
def post_path(post, language, main_language) do
|
def post_path(post, language, main_language) do
|
||||||
@@ -136,4 +113,30 @@ defmodule BDS.Rendering.LinksAndLanguages do
|
|||||||
|> String.split("-", parts: 2)
|
|> String.split("-", parts: 2)
|
||||||
|> hd()
|
|> hd()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp base_post_path(post) do
|
||||||
|
"/" <> Path.join(post_date_path_parts(post.created_at) ++ [post.slug]) <> "/"
|
||||||
|
end
|
||||||
|
|
||||||
|
defp post_date_path_parts(created_at) do
|
||||||
|
datetime = Persistence.from_unix_ms!(created_at)
|
||||||
|
year_month_path_parts(datetime) ++ [pad2(datetime.day)]
|
||||||
|
end
|
||||||
|
|
||||||
|
defp year_month_path_parts(created_at) when is_integer(created_at) do
|
||||||
|
created_at
|
||||||
|
|> Persistence.from_unix_ms!()
|
||||||
|
|> year_month_path_parts()
|
||||||
|
end
|
||||||
|
|
||||||
|
defp year_month_path_parts(%DateTime{} = datetime) do
|
||||||
|
[Integer.to_string(datetime.year), pad2(datetime.month)]
|
||||||
|
end
|
||||||
|
|
||||||
|
defp normalize_language_prefix(prefix) when is_binary(prefix) and prefix != "",
|
||||||
|
do: String.trim_trailing(prefix, "/")
|
||||||
|
|
||||||
|
defp normalize_language_prefix(_prefix), do: ""
|
||||||
|
|
||||||
|
defp pad2(value), do: value |> Integer.to_string() |> String.pad_leading(2, "0")
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user