Packages
absinthe
1.1.10
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/schema/rule/field_imports_exist.ex
defmodule Absinthe.Schema.Rule.FieldImportsExist do
@moduledoc false
# This has to be run prior to the module compilation, and is called
# from Notation.Writer instead of Rule
def check({definitions, errors}) do
definition_map = build_definition_map(definitions)
errors = Enum.reduce(definitions, errors, fn definition, errors ->
definition.attrs
|> Keyword.get(:field_imports)
|> case do
[_ | _] = imports ->
check_imports(definition, imports, definition_map, errors)
_ ->
errors
end
end)
{definitions, errors}
end
defp check_imports(definition, imports, definition_map, errors) do
Enum.reduce(imports, errors, fn {ref, _}, errors ->
case Map.fetch(definition_map, ref) do
{:ok, _} ->
errors
_ ->
[error(definition, ref) | errors]
end
end)
end
defp build_definition_map(definitions) do
definitions
|> Enum.filter(&Map.get(&1, :identifier))
|> Map.new(&{&1.identifier, &1})
end
defp error(definition, ref) do
msg = """
Field Import Erro
Object #{inspect definition.identifier} imports fields from #{inspect ref} but
#{inspect ref} does not exist in the schema!
""" |> String.strip
%{data: %{artifact: msg, value: ref}, location: %{file: definition.file, line: definition.line}, rule: __MODULE__}
end
end