Class: GraphQL::EnumType
Overview
Represents a collection of related values.
By convention, enum names are SCREAMING_CASE_NAMES
,
but other identifiers are supported too.
You can use as return types or as inputs.
By default, enums are passed to resolve
functions as
the strings that identify them, but you can provide a
custom Ruby value with the value:
keyword.
Defined Under Namespace
Classes: EnumValue, UnresolvedValueError
Instance Attribute Summary
Attributes inherited from BaseType
Instance Method Summary collapse
- #add_value(enum_value) ⇒ Object
-
#coerce_non_null_input(value_name) ⇒ Object
Get the underlying value for this enum value.
- #coerce_result(value, warden = nil) ⇒ Object
-
#initialize ⇒ EnumType
constructor
A new instance of EnumType.
- #kind ⇒ Object
- #to_s ⇒ Object
- #validate_non_null_input(value_name, warden) ⇒ Object
-
#values ⇒ Hash<String => EnumValue>
{name => value}
pairs contained in this type. - #values=(new_values) ⇒ Object
Methods inherited from BaseType
#==, #coerce_input, #connection_type, #define_connection, #define_edge, #edge_type, #get_field, resolve_related_type, #resolve_type, #to_list_type, #to_non_null_type, #unwrap, #valid_input?, #validate_input
Methods included from Define::InstanceDefinable
Methods included from Define::NonNullWithBang
Constructor Details
#initialize ⇒ EnumType
Returns a new instance of EnumType.
76 77 78 |
# File 'lib/graphql/enum_type.rb', line 76 def initialize @values_by_name = {} end |
Instance Method Details
#add_value(enum_value) ⇒ Object
87 88 89 |
# File 'lib/graphql/enum_type.rb', line 87 def add_value(enum_value) @values_by_name[enum_value.name] = enum_value end |
#coerce_non_null_input(value_name) ⇒ Object
Get the underlying value for this enum value
122 123 124 125 126 127 128 129 |
# File 'lib/graphql/enum_type.rb', line 122 def coerce_non_null_input(value_name) ensure_defined if @values_by_name.key?(value_name) @values_by_name.fetch(value_name).value else nil end end |
#coerce_result(value, warden = nil) ⇒ Object
131 132 133 134 135 136 137 138 139 140 |
# File 'lib/graphql/enum_type.rb', line 131 def coerce_result(value, warden = nil) ensure_defined all_values = warden ? warden.enum_values(self) : @values_by_name.each_value enum_value = all_values.find { |val| val.value == value } if enum_value enum_value.name else raise(UnresolvedValueError, "Can't resolve enum #{name} for #{value}") end end |
#kind ⇒ Object
97 98 99 |
# File 'lib/graphql/enum_type.rb', line 97 def kind GraphQL::TypeKinds::ENUM end |
#to_s ⇒ Object
142 143 144 |
# File 'lib/graphql/enum_type.rb', line 142 def to_s name end |
#validate_non_null_input(value_name, warden) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/graphql/enum_type.rb', line 101 def validate_non_null_input(value_name, warden) ensure_defined result = GraphQL::Query::InputValidationResult.new allowed_values = warden.enum_values(self) matching_value = allowed_values.find { |v| v.name == value_name } if matching_value.nil? result.add_problem("Expected #{JSON.generate(value_name, quirks_mode: true)} to be one of: #{allowed_values.join(', ')}") end result end |
#values ⇒ Hash<String => EnumValue>
Returns {name => value}
pairs contained in this type.
92 93 94 95 |
# File 'lib/graphql/enum_type.rb', line 92 def values ensure_defined @values_by_name end |
#values=(new_values) ⇒ Object
81 82 83 84 |
# File 'lib/graphql/enum_type.rb', line 81 def values=(new_values) @values_by_name = {} new_values.each { |enum_value| add_value(enum_value) } end |