Packages
absinthe
1.1.9
1.11.0
1.10.2
1.10.1
1.10.0
1.9.1
1.9.0
1.8.0
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.8
1.6.7
retired
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.6.0-rc.1
1.6.0-rc.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.5.0-rc.5
1.5.0-rc.4
1.5.0-rc.3
1.5.0-rc.2
1.5.0-rc.1
1.5.0-rc.0
1.5.0-beta.2
1.5.0-beta.1
1.5.0-beta.0
1.5.0-alpha.4
1.5.0-alpha.3
1.5.0-alpha.2
1.5.0-alpha.1
1.5.0-alpha.0
1.4.16
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.9
1.4.8
retired
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-rc.3
1.4.0-rc.2
1.4.0-rc.1
1.4.0-rc.0
1.4.0-beta.5
1.4.0-beta.4
1.4.0-beta.3
1.4.0-beta.2
1.4.0-beta.1
1.3.2
1.3.1
1.3.0
1.3.0-rc.0
1.3.0-beta.2
1.3.0-beta.1
1.3.0-beta.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc.0
1.2.0-beta.0
1.2.0-alpha0
1.2.0-alpha.2
1.2.0-alpha.1
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
0.5.2
0.5.1
0.5.0
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.2.3
0.2.2
0.2.1
0.1.0
GraphQL for Elixir
Current section
Files
Jump to
Current section
Files
lib/absinthe/execution/directives.ex
defmodule Absinthe.Execution.Directives do
@moduledoc false
alias Absinthe.Execution
alias Absinthe.Schema
alias Absinthe.Type
def check(execution, %{directives: ast_directives} = ast_node) do
Enum.reduce(ast_directives, {[], execution}, fn
ast_directive, {results, acc_execution} ->
case Schema.lookup_directive(execution.schema, ast_directive.name) do
nil ->
{
results,
acc_execution |> Execution.put_error(:directive, ast_directive.name, "Not defined", at: ast_directive)
}
definition ->
case Execution.Arguments.build(ast_directive, definition.args, execution) do
{:ok, args, checked_execution} ->
{
[Type.Directive.check(definition, ast_node, args) | results],
checked_execution
}
{:error, _, _, checked_execution} ->
{results, checked_execution}
end
end
end)
|> reduce_results
end
def check(execution, _) do
{:ok, execution}
end
@precedence [:include, :skip]
defp reduce_results({results, execution}) do
{
results |> do_reduce_results,
execution
}
end
defp do_reduce_results(results) do
results
|> Enum.sort_by(fn
result ->
Enum.find_index(results, &(&1 == result)) || -1
end)
|> List.last || :ok
end
end