Packages
absinthe
0.5.1
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
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(_, _) do
:ok
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