ash_hq/lib/ash_hq_web/doc_routes.ex

65 lines
1.7 KiB
Elixir
Raw Normal View History

defmodule AshHqWeb.DocRoutes do
@moduledoc "Helpers for routing to results of searches"
2023-02-21 18:52:45 +13:00
def doc_link(%AshHq.Docs.Library{name: name}) do
"https://hexdocs.pm/#{name}"
2022-03-30 17:40:17 +13:00
end
def doc_link(%AshHq.Docs.MixTask{
library_name: library_name,
module_name: module_name
}) do
"https://hexdocs.pm/#{library_name}/#{module_name}.html"
end
def doc_link(%AshHq.Docs.Module{
library_name: library_name,
name: name
}) do
"https://hexdocs.pm/#{library_name}/#{name}.html"
2022-03-30 17:40:17 +13:00
end
def doc_link(%AshHq.Docs.Function{
name: name,
arity: arity,
module_name: module_name,
library_name: library_name
}) do
"https://hexdocs.pm/#{library_name}/#{module_name}.html##{name}/#{arity}"
2022-03-30 17:40:17 +13:00
end
def doc_link(%AshHq.Docs.Guide{
route: route,
library_version: %{
2023-09-28 02:56:53 +13:00
library_name: library_name
}
}) do
"/docs/guides/#{library_name}/latest/#{route}"
2022-03-29 08:47:43 +13:00
end
def doc_link(%AshHq.Docs.LibraryVersion{}) do
raise "Shouldn't be called anymore"
2022-03-30 05:12:28 +13:00
end
def doc_link(%AshHq.Docs.Extension{
library_version: %{
library_name: library_name
2022-04-08 18:59:39 +12:00
},
module: module
}) do
"https://hexdocs.pm/#{library_name}/#{module}.html"
2022-03-28 10:26:35 +13:00
end
def doc_link(item) do
"https://hexdocs.pm/#{item.library_name}/dsl-#{sanitize_name(String.trim_trailing(item.extension_module, ".Dsl"))}.html##{String.replace(item.sanitized_path, "/", "-")}"
2022-04-08 18:59:39 +12:00
end
def sanitize_name(name, allow_forward_slash? \\ false) do
if allow_forward_slash? do
String.downcase(String.replace(to_string(name), ~r/[^A-Za-z0-9\/_]/, "-"))
else
String.downcase(String.replace(to_string(name), ~r/[^A-Za-z0-9_]/, "-"))
end
2022-03-30 05:12:28 +13:00
end
2022-03-28 10:26:35 +13:00
end