Class: GraphQL::Schema::InputObject

Inherits:
Member
  • Object
show all
Extended by:
Forwardable, Member::AcceptsDefinition, Member::HasArguments
Includes:
Dig
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 Dig

#dig

Methods included from Member::HasPath

#path

Methods included from Member::RelayShortcuts

#connection_type, #connection_type_class, #edge_type, #edge_type_class

Methods included from Member::Scoped

#scope_items

Methods included from Member::TypeSystemHelpers

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

Methods included from Member::BaseDSLMethods

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

Methods included from Relay::TypeExtensions

#connection_type, #define_connection, #define_edge, #edge_type

Methods included from Member::CachedGraphQLDefinition

#graphql_definition, #initialize_copy

Constructor Details

#initialize(values = nil, ruby_kwargs: nil, context:, defaults_used:) ⇒ InputObject

Returns a new instance of InputObject



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

def initialize(values = nil, ruby_kwargs: nil, context:, defaults_used:)
  @context = context
  if ruby_kwargs
    @ruby_style_hash = ruby_kwargs
  else
    @arguments = self.class.arguments_class.new(values, context: context, defaults_used: defaults_used)
    # Symbolized, underscored hash:
    @ruby_style_hash = @arguments.to_kwargs
  end
  # 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>)


82
83
84
# File 'lib/graphql/schema/input_object.rb', line 82

def arguments_class
  @arguments_class
end

Instance Attribute Details

#argumentsGraphQL::Query::Arguments (readonly)

Returns The underlying arguments instance

Returns:



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

def arguments
  @arguments
end

#contextGraphQL::Query::Context (readonly)

Returns The context for this query

Returns:



29
30
31
# File 'lib/graphql/schema/input_object.rb', line 29

def context
  @context
end

Class Method Details

.argument(*args) ⇒ Object



84
85
86
87
88
89
90
91
92
# File 'lib/graphql/schema/input_object.rb', line 84

def argument(*args)
  argument_defn = super
  # Add a method access
  arg_name = argument_defn.graphql_definition.name
  method_name = Member::BuildType.underscore(arg_name).to_sym
  define_method(method_name) do
    @ruby_style_hash[method_name]
  end
end

.kindObject



110
111
112
# File 'lib/graphql/schema/input_object.rb', line 110

def kind
  GraphQL::TypeKinds::INPUT_OBJECT
end

.to_graphqlObject



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/graphql/schema/input_object.rb', line 94

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)


61
62
63
64
65
66
67
68
69
# File 'lib/graphql/schema/input_object.rb', line 61

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

#key?(key) ⇒ Boolean

Returns:



71
72
73
# File 'lib/graphql/schema/input_object.rb', line 71

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

#to_hObject



37
38
39
40
41
# File 'lib/graphql/schema/input_object.rb', line 37

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



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

def to_kwargs
  @ruby_style_hash.dup
end

#unwrap_value(value) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/graphql/schema/input_object.rb', line 43

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