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.
"""
def route(resource, criteria \\ %{}) do
resource
|> routes()
|> Enum.find(fn route ->
Map.take(route, Map.keys(criteria)) == criteria
end)
end
def join_fields(resource, association) do
join_fields(resource)[association]
end
def join_fields(resource) do
resource.json_api_join_fields()
end
def routes(resource) do
resource.json_api_routes()
end
def fields(resource) do
resource.json_api_fields()
end
def includes(resource) do
resource.json_api_includes()
end
def host(api) do
api.host()
end
def prefix(api) do
api.prefix()
end
def serve_schema(api) do
api.serve_schema()
end
@doc false
def sanitize_routes(_relationships, all_routes) do
all_routes
|> Enum.group_by(fn route ->
{route.method, route.route}
end)
|> Enum.flat_map(fn {{method, route}, group} ->
case group do
[route] ->
[route]
_ ->
raise "Duplicate routes defined for #{method}: #{route}"
end
end)
end
end