ash_hq/lib/ash_hq_web/doc_routes.ex

124 lines
3.6 KiB
Elixir
Raw Normal View History

defmodule AshHqWeb.DocRoutes do
@moduledoc "Helpers for routing to results of searches"
2022-03-28 10:26:35 +13:00
def library_link(library, name) do
"/docs/dsl/#{library.name}/#{name}"
2022-03-28 10:26:35 +13:00
end
2022-04-08 18:59:39 +12:00
def doc_link(entity, selected_versions \\ %{})
2022-03-30 17:40:17 +13:00
2023-01-25 19:52:13 +13:00
def doc_link(
%AshHq.Discord.Message{thread_id: thread_id, channel_name: channel_name},
_selected_version
) do
"/forum/#{channel_name}/#{thread_id}"
end
2022-04-08 18:59:39 +12:00
def doc_link(%AshHq.Docs.Library{name: name}, _selected_version) do
"/docs/dsl/#{name}"
2022-03-30 17:40:17 +13:00
end
def doc_link(
%AshHq.Docs.MixTask{
sanitized_name: sanitized_name,
library_name: library_name,
version_name: version_name,
library_id: library_id
},
selected_versions
) do
"/docs/mix_task/#{library_name}/#{version(version_name, library_id, selected_versions)}/#{sanitized_name}"
end
2022-04-08 18:59:39 +12:00
def doc_link(
%AshHq.Docs.Module{
sanitized_name: sanitized_name,
2022-04-08 18:59:39 +12:00
library_name: library_name,
version_name: version_name,
library_id: library_id
},
selected_versions
) do
"/docs/module/#{library_name}/#{version(version_name, library_id, selected_versions)}/#{sanitized_name}"
2022-03-30 17:40:17 +13:00
end
2022-04-08 18:59:39 +12:00
def doc_link(
%AshHq.Docs.Function{
sanitized_name: sanitized_name,
2022-04-08 18:59:39 +12:00
arity: arity,
type: type,
module_name: module_name,
library_name: library_name,
version_name: version_name,
library_id: library_id
},
selected_versions
) do
"/docs/module/#{sanitize_name(library_name)}/#{version(version_name, library_id, selected_versions)}/#{sanitize_name(module_name)}##{type}-#{sanitized_name}-#{arity}"
2022-03-30 17:40:17 +13:00
end
2022-04-08 18:59:39 +12:00
def doc_link(
%AshHq.Docs.Guide{
route: route,
library_version: %{
library_name: library_name,
version: version,
library_id: library_id
}
},
selected_versions
) do
"/docs/guides/#{library_name}/#{version(version, library_id, selected_versions)}/#{route}"
2022-03-29 08:47:43 +13:00
end
2022-04-08 18:59:39 +12:00
def doc_link(
%AshHq.Docs.LibraryVersion{
library_name: library_name,
version: version,
library_id: library_id
},
selected_versions
) do
"/docs/dsl/#{library_name}/#{version(version, library_id, selected_versions)}"
2022-03-30 05:12:28 +13:00
end
2022-04-08 18:59:39 +12:00
def doc_link(
%AshHq.Docs.Extension{
library_version: %{
library_name: library_name,
version: version,
library_id: library_id
},
sanitized_name: sanitized_name
2022-04-08 18:59:39 +12:00
},
selected_versions
) do
"/docs/dsl/#{library_name}/#{version(version, library_id, selected_versions)}/#{sanitized_name}"
2022-03-28 10:26:35 +13:00
end
2022-04-08 18:59:39 +12:00
def doc_link(item, selected_versions) do
2022-03-30 18:07:17 +13:00
case item do
%AshHq.Docs.Dsl{} = item ->
"/docs/dsl/#{item.library_name}/#{version(item.version_name, item.library_id, selected_versions)}/#{sanitize_name(item.extension_name)}/#{item.sanitized_path}"
2022-03-28 10:26:35 +13:00
2022-03-30 18:07:17 +13:00
%AshHq.Docs.Option{} = item ->
"/docs/dsl/#{item.library_name}/#{version(item.version_name, item.library_id, selected_versions)}/#{sanitize_name(item.extension_name)}/#{item.sanitized_path}##{item.name}"
2022-04-08 18:59:39 +12:00
end
end
defp version(version_name, library_id, selected_versions) do
if selected_versions[library_id] == "latest" do
"latest"
else
version_name
2022-03-28 10:26:35 +13:00
end
end
2022-03-30 05:12:28 +13:00
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