Packages
cqrs_tools
0.5.27
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/object.ex
if Code.ensure_loaded?(Absinthe) do
alias Cqrs.Absinthe.Args
defmodule Cqrs.Absinthe.Object do
@moduledoc false
def create_object(object_name, source_module, opts \\ []) do
fields = fields(source_module, opts)
case Keyword.get(opts, :input?, false) do
true ->
quote do
input_object unquote(object_name) do
(unquote_splicing(fields))
end
end
false ->
quote do
object unquote(object_name) do
(unquote_splicing(fields))
end
end
end
end
defp fields(source_module, opts) do
case Keyword.get(opts, :input?, false) do
false ->
source_module.__fields__()
|> Args.extract_args(opts)
|> Enum.map(fn {name, absinthe_type, _required, opts} ->
quote do: field(unquote(name), unquote(absinthe_type), unquote(opts))
end)
true ->
source_module.__fields__()
|> Args.extract_args(opts)
|> Enum.map(fn {name, absinthe_type, required, opts} ->
case required do
true -> quote do: field(unquote(name), non_null(unquote(absinthe_type)), unquote(opts))
false -> quote do: field(unquote(name), unquote(absinthe_type), unquote(opts))
end
end)
end
end
end
end