Packages
cqrs_tools
0.3.2
0.5.28
0.5.27
0.5.26
0.5.25
0.5.24
0.5.23
0.5.22
0.5.21
0.5.20
0.5.19
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.22
0.3.21
0.3.20
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.30
0.2.29
0.2.28
0.2.27
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.1
0.1.0
A collection of handy Elixir macros for CQRS applications.
Current section
Files
Jump to
Current section
Files
lib/cqrs/absinthe/args.ex
if Code.ensure_loaded?(Absinthe) do
defmodule Cqrs.Absinthe.Args do
@moduledoc false
def extract_args(fields, opts) do
only = Keyword.get(opts, :only, [])
except = Keyword.get(opts, :except, [])
fields =
case {only, except} do
{[], []} -> fields
{[], except} -> Enum.reject(fields, &Enum.member?(except, elem(&1, 0)))
{only, []} -> Enum.filter(fields, &Enum.member?(only, elem(&1, 0)))
_ -> raise "You can only specify :only or :except"
end
fields
|> Enum.reject(fn {_name, _type, opts} -> Keyword.get(opts, :internal, false) == true end)
|> Enum.map(fn field ->
{name, _type, field_opts} = field
absinthe_type = absinthe_type(field, opts)
required = Keyword.get(field_opts, :required, false)
{name, absinthe_type, required}
end)
end
defp absinthe_type({name, :map, _}, opts) do
source = Keyword.get(opts, :source)
macro = Keyword.get(opts, :macro)
map_type =
get_configured_type_mapping(:map) || get_named_arg_type_mapping(name, opts) ||
raise Cqrs.Absinthe.MapTypeMappingError, source: source, macro: macro, type: name
quote do: unquote(map_type)
end
defp absinthe_type({name, {:array, type}, _}, opts) do
type = absinthe_type({name, type, nil}, opts)
quote do: list_of(unquote(type))
end
defp absinthe_type({name, Ecto.Enum, field_opts}, opts) do
absinthe_type({name, :enum, field_opts}, opts)
end
defp absinthe_type({name, :enum, _}, opts) do
source = Keyword.get(opts, :source)
macro = Keyword.get(opts, :macro)
enum_type =
get_named_arg_type_mapping(name, opts) ||
raise Cqrs.Absinthe.EnumTypeMappingError, source: source, macro: macro, type: name
quote do: unquote(enum_type)
end
defp absinthe_type({_name, :binary_id, _}, _opts), do: quote(do: :id)
defp absinthe_type({_name, :utc_datetime, _}, _opts), do: quote(do: :datetime)
defp absinthe_type({_name, type, _}, _opts), do: quote(do: unquote(type))
defp get_configured_type_mapping(type) do
:cqrs_tools
|> Application.get_env(:absinthe, [])
|> Keyword.get(:type_mappings, [])
|> Keyword.get(type)
end
def get_named_arg_type_mapping(name, opts) do
opts
|> Keyword.get(:arg_types, [])
|> Keyword.get(name)
end
end
end