Class: GraphQL::Schema::InputObject

Inherits:
Member
  • Object
show all
Extended by:
Forwardable, Member::AcceptsDefinition, Member::HasArguments
Defined in:
lib/graphql/schema/input_object.rb

Constant Summary

Constants included from Member::GraphQLTypeNames

Member::GraphQLTypeNames::Boolean, Member::GraphQLTypeNames::ID, Member::GraphQLTypeNames::Int

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Member::HasArguments

add_argument, argument, argument_class, own_arguments

Methods included from Member::CachedGraphQLDefinition

#graphql_definition, #initialize_copy

Methods included from Relay::TypeExtensions

#connection_type, #define_connection, #define_edge, #edge_type

Methods included from Member::BaseDSLMethods

#accessible?, #authorized?, #default_graphql_name, #description, #graphql_name, #introspection, #mutation, #name, #overridden_graphql_name, #to_graphql, #visible?

Methods included from Member::TypeSystemHelpers

#kind, #list?, #non_null?, #to_list_type, #to_non_null_type, #to_type_signature

Methods included from Member::Scoped

#scope_items

Methods included from Member::RelayShortcuts

#connection_type, #connection_type_class, #edge_type, #edge_type_class

Methods included from Member::HasPath

#path

Constructor Details

#initialize(values, context:, defaults_used:) ⇒ InputObject

Returns a new instance of InputObject.



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/graphql/schema/input_object.rb', line 9

def initialize(values, context:, defaults_used:)
  @context = context
  @arguments = self.class.arguments_class.new(values, context: context, defaults_used: defaults_used)
  # Symbolized, underscored hash:
  @ruby_style_hash = @arguments.to_kwargs
  # Apply prepares, not great to have it duplicated here.
  self.class.arguments.each do |name, arg_defn|
    ruby_kwargs_key = arg_defn.keyword
    if @ruby_style_hash.key?(ruby_kwargs_key) && arg_defn.prepare
      @ruby_style_hash[ruby_kwargs_key] = arg_defn.prepare_value(self, @ruby_style_hash[ruby_kwargs_key])
    end
  end
end

Class Attribute Details

.arguments_classClass<GraphQL::Arguments>

Returns:

  • (Class<GraphQL::Arguments>)


75
76
77
# File 'lib/graphql/schema/input_object.rb', line 75

def arguments_class
  @arguments_class
end

Instance Attribute Details

#argumentsGraphQL::Query::Arguments (readonly)

Returns The underlying arguments instance.

Returns:



27
28
29
# File 'lib/graphql/schema/input_object.rb', line 27

def arguments
  @arguments
end

#contextGraphQL::Query::Context (readonly)

Returns The context for this query.

Returns:



24
25
26
# File 'lib/graphql/schema/input_object.rb', line 24

def context
  @context
end

Class Method Details

.argument(*args) ⇒ Object



77
78
79
80
81
82
83
84
# File 'lib/graphql/schema/input_object.rb', line 77

def argument(*args)
  argument_defn = super
  # Add a method access
  arg_name = argument_defn.graphql_definition.name
  define_method(Member::BuildType.underscore(arg_name)) do
    @arguments.public_send(arg_name)
  end
end

.kindObject



102
103
104
# File 'lib/graphql/schema/input_object.rb', line 102

def kind
  GraphQL::TypeKinds::INPUT_OBJECT
end

.to_graphqlObject



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/graphql/schema/input_object.rb', line 86

def to_graphql
  type_defn = GraphQL::InputObjectType.new
  type_defn.name = graphql_name
  type_defn.description = description
  type_defn.[:type_class] = self
  type_defn.mutation = mutation
  arguments.each do |name, arg|
    type_defn.arguments[arg.graphql_definition.name] = arg.graphql_definition
  end
  # Make a reference to a classic-style Arguments class
  self.arguments_class = GraphQL::Query::Arguments.construct_arguments_class(type_defn)
  # But use this InputObject class at runtime
  type_defn.arguments_class = self
  type_defn
end

Instance Method Details

#[](key) ⇒ Object

Lookup a key on this object, it accepts new-style underscored symbols Or old-style camelized identifiers.

Parameters:

  • key (Symbol, String)


56
57
58
59
60
61
62
# File 'lib/graphql/schema/input_object.rb', line 56

def [](key)
  if @ruby_style_hash.key?(key)
    @ruby_style_hash[key]
  else
    @arguments[key]
  end
end

#key?(key) ⇒ Boolean

Returns:



64
65
66
# File 'lib/graphql/schema/input_object.rb', line 64

def key?(key)
  @ruby_style_hash.key?(key) || @arguments.key?(key)
end

#to_hObject



32
33
34
35
36
# File 'lib/graphql/schema/input_object.rb', line 32

def to_h
  @ruby_style_hash.inject({}) do |h, (key, value)|
    h.merge(key => unwrap_value(value))
  end
end

#to_kwargsObject

A copy of the Ruby-style hash



69
70
71
# File 'lib/graphql/schema/input_object.rb', line 69

def to_kwargs
  @ruby_style_hash.dup
end

#unwrap_value(value) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/graphql/schema/input_object.rb', line 38

def unwrap_value(value)
  case value
  when Array
    value.map { |item| unwrap_value(item) }
  when Hash
    value.inject({}) do |h, (key, value)|
      h.merge(key => unwrap_value(value))
    end
  when InputObject
    value.to_h
  else
    value
  end
end