ash_hq/lib/ash_hq_web/routes.ex

83 lines
3 KiB
Elixir
Raw Normal View History

2022-03-28 10:26:35 +13:00
defmodule AshHqWeb.Routes do
2022-04-05 18:20:36 +12:00
def guide_link(library, version, route) do
"/docs/guides/#{sanitize_name(library.name)}/#{sanitize_name(version)}/#{route}"
2022-03-30 05:12:28 +13:00
end
def library_link(library, nil) do
"/docs/dsl/#{sanitize_name(library.name)}"
2022-03-29 08:47:43 +13:00
end
2022-03-28 10:26:35 +13:00
def library_link(library, name) do
2022-03-30 05:12:28 +13:00
"/docs/dsl/#{sanitize_name(library.name)}/#{sanitize_name(name)}"
2022-03-28 10:26:35 +13:00
end
def extension_link(library, name, extension) do
2022-03-30 05:12:28 +13:00
"/docs/dsl/#{sanitize_name(library.name)}/#{sanitize_name(name)}/#{sanitize_name(extension)}"
2022-03-28 10:26:35 +13:00
end
2022-03-30 17:40:17 +13:00
def dsl_link(library, name, extension, item) do
2022-03-30 18:07:17 +13:00
case item do
%AshHq.Docs.Dsl{} = item ->
"/docs/dsl/#{sanitize_name(library.name)}/#{sanitize_name(name)}/#{sanitize_name(extension)}/#{Enum.map_join(item.path ++ [item.name], "/", &sanitize_name/1)}"
2022-03-30 17:40:17 +13:00
2022-03-30 18:07:17 +13:00
%AshHq.Docs.Option{} = item ->
"/docs/dsl/#{sanitize_name(library.name)}/#{sanitize_name(name)}/#{sanitize_name(extension)}/#{Enum.map_join(item.path, "/", &sanitize_name/1)}##{item.name}"
2022-03-30 17:40:17 +13:00
end
end
def module_link(library, version, module) do
"/docs/module/#{sanitize_name(library.name)}/#{sanitize_name(version)}/#{sanitize_name(module)}"
end
def doc_link(%AshHq.Docs.Module{
name: name,
library_name: library_name,
version_name: version_name
}) do
"/docs/module/#{sanitize_name(library_name)}/#{sanitize_name(version_name)}/#{sanitize_name(name)}"
end
def doc_link(%AshHq.Docs.Function{
name: name,
arity: arity,
2022-04-01 14:29:58 +13:00
type: type,
2022-03-30 17:40:17 +13:00
module_name: module_name,
library_name: library_name,
version_name: version_name
}) do
2022-04-01 14:29:58 +13:00
"/docs/module/#{sanitize_name(library_name)}/#{sanitize_name(version_name)}/#{sanitize_name(module_name)}/##{type}-#{sanitize_name(name)}-#{arity}"
2022-03-30 17:40:17 +13:00
end
2022-03-29 08:47:43 +13:00
def doc_link(%AshHq.Docs.Guide{
2022-04-05 18:20:36 +12:00
route: route,
2022-03-29 08:47:43 +13:00
library_version: %{library_name: library_name, version: version}
}) do
2022-04-05 18:20:36 +12:00
"/docs/guides/#{sanitize_name(library_name)}/#{sanitize_name(version)}/#{route}"
2022-03-29 08:47:43 +13:00
end
2022-03-28 10:26:35 +13:00
def doc_link(%AshHq.Docs.LibraryVersion{library_name: library_name, version: version}) do
2022-03-30 05:12:28 +13:00
"/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)}"
2022-03-28 10:26:35 +13:00
end
def doc_link(item) do
2022-03-30 18:07:17 +13:00
case item do
%AshHq.Docs.Dsl{} = item ->
"/docs/dsl/#{sanitize_name(item.library_name)}/#{sanitize_name(item.version_name)}/#{sanitize_name(item.extension_name)}/#{Enum.map_join(item.path ++ [item.name], "/", &sanitize_name/1)}"
2022-03-28 10:26:35 +13:00
2022-03-30 18:07:17 +13:00
%AshHq.Docs.Option{} = item ->
"/docs/dsl/#{sanitize_name(item.library_name)}/#{sanitize_name(item.version_name)}/#{sanitize_name(item.extension_name)}/#{Enum.map_join(item.path, "/", &sanitize_name/1)}##{item.name}"
2022-03-28 10:26:35 +13:00
end
end
2022-03-30 05:12:28 +13:00
def sanitize_name(name) do
String.downcase(String.replace(name, ~r/[^A-Za-z0-9_]/, "-"))
end
2022-03-28 10:26:35 +13:00
end