Current section

Files

Jump to
ash_json_api lib ash_json_api.ex
Raw

lib/ash_json_api.ex

defmodule AshJsonApi do
@moduledoc """
Tools for introspecting ash json api resources/apis.
"""
alias Ash.Dsl.Extension
def route(resource, criteria \\ %{}) do
resource
|> routes()
|> Enum.find(fn route ->
Map.take(route, Map.keys(criteria)) == criteria
end)
end
def type(resource) do
Extension.get_opt(resource, [:json_api], :type)
end
def routes(resource) do
Extension.get_entities(resource, [:json_api, :routes])
end
def fields(resource) do
Extension.get_opt(resource, [:json_api], :fields)
end
def includes(resource) do
Extension.get_opt(resource, [:json_api], :includes)
end
def prefix(api) do
Extension.get_opt(api, [:json_api], :prefix)
end
def serve_schema?(api) do
Extension.get_opt(api, [:json_api], :serve_schema?)
end
def authorize?(api) do
Extension.get_opt(api, [:json_api], :authorize?)
end
def router!(api) do
case Code.ensure_compiled(api) do
{:module, _module} ->
:persistent_term.get({api, :ash_json_api, :router}, nil)
error ->
raise "#{inspect(api)} was not compiled: #{inspect(error)}"
end
end
def base_route(resource) do
Extension.get_opt(resource, [:json_api, :routes], :base)
end
end