ash_hq/lib/ash_hq_web/routes.ex
Zach Daniel de97413240 WIP
2022-03-29 12:12:28 -04:00

49 lines
1.7 KiB
Elixir

defmodule AshHqWeb.Routes do
def guide_link(library, version, guide) do
"/docs/guides/#{sanitize_name(library.name)}/#{sanitize_name(version)}/#{sanitize_name(guide)}"
end
def library_link(library, nil) do
"/docs/dsl/#{sanitize_name(library.name)}"
end
def library_link(library, name) do
"/docs/dsl/#{sanitize_name(library.name)}/#{sanitize_name(name)}"
end
def extension_link(library, name, extension) do
"/docs/dsl/#{sanitize_name(library.name)}/#{sanitize_name(name)}/#{sanitize_name(extension)}"
end
def doc_link(%AshHq.Docs.Guide{
url_safe_name: url_safe_name,
library_version: %{library_name: library_name, version: version}
}) do
"/docs/guides/#{sanitize_name(library_name)}/#{sanitize_name(version)}/#{url_safe_name}"
end
def doc_link(%AshHq.Docs.LibraryVersion{library_name: library_name, version: version}) do
"/docs/dsl/#{sanitize_name(library_name)}/#{sanitize_name(version)}"
end
def doc_link(%AshHq.Docs.Extension{
library_version: %{library_name: library_name, version: version},
name: name
}) do
"/docs/dsl/#{sanitize_name(library_name)}/#{sanitize_name(version)}/#{sanitize_name(name)}"
end
def doc_link(item) do
case item.path do
[] ->
"/docs/dsl/#{sanitize_name(item.library_name)}/#{sanitize_name(item.version_name)}/#{sanitize_name(item.extension_name)}##{sanitize_name(item.name)}"
path ->
"/docs/dsl/#{sanitize_name(item.library_name)}/#{sanitize_name(item.version_name)}/#{sanitize_name(item.extension_name)}##{Enum.map_join(path ++ [item.name], "-", &sanitize_name/1)}"
end
end
def sanitize_name(name) do
String.downcase(String.replace(name, ~r/[^A-Za-z0-9_]/, "-"))
end
end