Packages
absinthe
1.4.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
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/absinthe/schema/rule/default_enum_value_present.ex
defmodule Absinthe.Schema.Rule.DefaultEnumValuePresent do
use Absinthe.Schema.Rule
alias Absinthe.{Schema, Type}
require IEx
@moduledoc false
def explanation(%{data: %{default_value: default_value, type: type, value_list: value_list}}) do
"""
The default_value for an enum must be present in the enum values.
Could not use default value of "#{default_value}" for #{inspect type}.
Valid values are:
#{value_list}
"""
end
def check(schema) do
Schema.types(schema)
|> Enum.flat_map(&check_type(schema, &1))
end
defp check_type(schema, %Type.Object{fields: fields}) when not is_nil(fields) do
Enum.flat_map(fields, &check_field(schema, &1))
end
defp check_type(_schema, _type), do: []
defp check_field(schema, {_name, %{args: args}}) when not is_nil(args) do
Enum.flat_map(args, &check_args(schema, &1))
end
defp check_field(_schema, _type), do: []
defp check_args(schema, {_name, %{default_value: default_value, type: type}}) when not is_nil(default_value) do
type = Schema.lookup_type(schema, type)
check_default_value_present(default_value, type)
end
defp check_args(_schema, _args), do: []
defp check_default_value_present(default_value, %Type.Enum{} = type) do
values = Enum.map(type.values, &(elem(&1, 1).value))
value_list = Enum.map(values, &("\n * #{&1}"))
if not default_value in values do
detail = %{
value_list: value_list,
type: type.__reference__.identifier,
default_value: default_value
}
[report(type.__reference__.location, detail)]
else
[]
end
end
defp check_default_value_present(_default_value, _type), do: []
end