Class: GraphQL::InputObjectType
- Defined in:
- lib/graphql/input_object_type.rb
Overview
InputObjectTypes are key-value inputs for fields.
Input objects have arguments which are identical to Field arguments. They map names to types and support default values. Their input types can be any input types, including InputObjectTypes.
In a resolve
function, you can access the values by making nested lookups on args
.
Instance Attribute Summary collapse
-
#arguments ⇒ Hash<String => GraphQL::Argument>
(also: #input_fields)
Map String argument names to their Argument implementations.
-
#mutation ⇒ GraphQL::Relay::Mutation?
The mutation this field was derived from, if it was derived from a mutation.
Attributes inherited from BaseType
#default_relay, #default_scalar, #description, #introspection, #name
Instance Method Summary collapse
- #coerce_non_null_input(value) ⇒ Object
- #coerce_result(value) ⇒ Object
-
#initialize ⇒ InputObjectType
constructor
A new instance of InputObjectType.
- #initialize_copy(other) ⇒ Object
- #kind ⇒ Object
- #validate_non_null_input(input, warden) ⇒ Object
Methods inherited from BaseType
#==, #coerce_input, #connection_type, #default_relay?, #default_scalar?, #define_connection, #define_edge, #edge_type, #get_field, #introspection?, resolve_related_type, #resolve_type, #to_definition, #to_list_type, #to_non_null_type, #to_s, #unwrap, #valid_input?, #validate_input
Methods included from Define::InstanceDefinable
Methods included from Define::NonNullWithBang
Constructor Details
#initialize ⇒ InputObjectType
Returns a new instance of InputObjectType.
44 45 46 47 |
# File 'lib/graphql/input_object_type.rb', line 44 def initialize super @arguments = {} end |
Instance Attribute Details
#arguments ⇒ Hash<String => GraphQL::Argument> Also known as: input_fields
Returns Map String argument names to their Argument implementations.
40 41 42 |
# File 'lib/graphql/input_object_type.rb', line 40 def arguments @arguments end |
#mutation ⇒ GraphQL::Relay::Mutation?
Returns The mutation this field was derived from, if it was derived from a mutation.
37 38 39 |
# File 'lib/graphql/input_object_type.rb', line 37 def mutation @mutation end |
Instance Method Details
#coerce_non_null_input(value) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/graphql/input_object_type.rb', line 90 def coerce_non_null_input(value) input_values = {} arguments.each do |input_key, input_field_defn| field_value = value[input_key] if value.key?(input_key) coerced_value = input_field_defn.type.coerce_input(field_value) else coerced_value = input_field_defn.default_value end if coerced_value || value.key?(input_key) input_values[input_key] = coerced_value end end GraphQL::Query::Arguments.new(input_values, argument_definitions: arguments) end |
#coerce_result(value) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/graphql/input_object_type.rb', line 110 def coerce_result(value) # Allow the application to provide values as :symbols, and convert them to the strings value = value.reduce({}) { |memo, (k, v)| memo[k.to_s] = v; memo } result = {} arguments.each do |input_key, input_field_defn| input_value = value[input_key] result[input_key] = input_value.nil? ? nil : input_field_defn.type.coerce_result(input_value) if value.key?(input_key) end result end |
#initialize_copy(other) ⇒ Object
49 50 51 52 |
# File 'lib/graphql/input_object_type.rb', line 49 def initialize_copy(other) super @arguments = other.arguments.dup end |
#kind ⇒ Object
54 55 56 |
# File 'lib/graphql/input_object_type.rb', line 54 def kind GraphQL::TypeKinds::INPUT_OBJECT end |
#validate_non_null_input(input, warden) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/graphql/input_object_type.rb', line 58 def validate_non_null_input(input, warden) result = GraphQL::Query::InputValidationResult.new if (input.to_h rescue nil).nil? result.add_problem( "Expected #{JSON.generate(input, quirks_mode: true)} to be a key, value object " \ " responding to `to_h`." ) return result end visible_arguments_map = warden.arguments(self).reduce({}) { |m, f| m[f.name] = f; m} # Items in the input that are unexpected input.each do |name, value| if visible_arguments_map[name].nil? result.add_problem("Field is not defined on #{self.name}", [name]) end end # Items in the input that are expected, but have invalid values visible_arguments_map.map do |name, field| field_result = field.type.validate_input(input[name], warden) if !field_result.valid? result.merge_result!(name, field_result) end end result end |