graphql 1.10.7 → 1.10.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dffbc22cc92ab7e74cf26f0a6e916ae1f03014722e350318af8ee367c9eb6f40
4
- data.tar.gz: 8b98748a98c2a7b5d471542989245a16d148b44519c69aa51cec062649357b31
3
+ metadata.gz: 13caa4920df03f81232a23cf9fe5707ee3602a6c42bedace93870645f35d1248
4
+ data.tar.gz: 597cbe2fd51c36a0e0de158d51c70d1d057a2712d44a34c71872ef0586a9c3d9
5
5
  SHA512:
6
- metadata.gz: bf169d1fe41d60ad045e0faae46cfa263d4b5f2bffd56bdd527b940702e9a6e44996d7b8402a6a213a593e68adcd1b885b3ba8d7240b236db1383ae9d9073f6c
7
- data.tar.gz: 24293245691980f79e316977fe24a6dfc6025f25d7d46806d6e46a8cc44ce9d1f84a7217487fd147209d6bef4a4ffdb0d67645fb87506850e420683a745aa90a
6
+ metadata.gz: ca5468c4b6632a4028f4bebf226c7a3aee5bb6786096b1b5a843b2ae476043160b1fe52111ae70d62c5a35cc66f9edd2d903128ebb2412c87054b9040f2a55aa
7
+ data.tar.gz: e9ad2d87cb3898d849266bb743251d922024541ee9d08090cb4f7898331fa15962697a87f386011b7450ca9af3c730c23ff74ca4d2191af6c319d3168add1bdd
@@ -54,7 +54,7 @@ module GraphQL
54
54
  case defined_complexity
55
55
  when Proc
56
56
  arguments = @query.arguments_for(@node, @field_definition)
57
- defined_complexity.call(@query.context, arguments, child_complexity)
57
+ defined_complexity.call(@query.context, arguments.keyword_arguments, child_complexity)
58
58
  when Numeric
59
59
  defined_complexity + child_complexity
60
60
  else
@@ -43,8 +43,8 @@ module GraphQL
43
43
  @storage = storage
44
44
  end
45
45
 
46
- def each
47
- @storage.each { |i| yield(i) }
46
+ def each(&block)
47
+ @storage.each(&block)
48
48
  end
49
49
  end
50
50
 
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
+ require "graphql/execution/interpreter/argument_value"
3
+ require "graphql/execution/interpreter/arguments"
2
4
  require "graphql/execution/interpreter/arguments_cache"
3
5
  require "graphql/execution/interpreter/execution_errors"
4
6
  require "graphql/execution/interpreter/hash_response"
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GraphQL
4
+ module Execution
5
+ class Interpreter
6
+ # A container for metadata regarding arguments present in a GraphQL query.
7
+ # @see Interpreter::Arguments#argument_values for a hash of these objects.
8
+ class ArgumentValue
9
+ def initialize(definition:, value:, default_used:)
10
+ @definition = definition
11
+ @value = value
12
+ @default_used = default_used
13
+ end
14
+
15
+ # @return [Object] The Ruby-ready value for this Argument
16
+ attr_reader :value
17
+
18
+ # @return [GraphQL::Schema::Argument] The definition instance for this argument
19
+ attr_reader :definition
20
+
21
+ # @return [Boolean] `true` if the schema-defined `default_value:` was applied in this case. (No client-provided value was present.)
22
+ def default_used?
23
+ @default_used
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GraphQL
4
+ module Execution
5
+ class Interpreter
6
+ # A wrapper for argument hashes in GraphQL queries.
7
+ #
8
+ # @see GraphQL::Query#arguments_for to get access to these objects.
9
+ class Arguments
10
+ extend Forwardable
11
+
12
+ # The Ruby-style arguments hash, ready for a resolver.
13
+ # This hash is the one used at runtime.
14
+ #
15
+ # @return [Hash<Symbol, Object>]
16
+ attr_reader :keyword_arguments
17
+
18
+ def initialize(keyword_arguments:, argument_values:)
19
+ @keyword_arguments = keyword_arguments
20
+ @argument_values = argument_values
21
+ end
22
+
23
+ # Yields `ArgumentValue` instances which contain detailed metadata about each argument.
24
+ def each_value
25
+ argument_values.each { |arg_v| yield(arg_v) }
26
+ end
27
+
28
+ # @return [Hash{Symbol => ArgumentValue}]
29
+ attr_reader :argument_values
30
+
31
+ def_delegators :@keyword_arguments, :key?, :[], :keys, :each, :values
32
+
33
+ def inspect
34
+ "#<#{self.class} @keyword_arguments=#{keyword_arguments.inspect}>"
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -14,13 +14,9 @@ module GraphQL
14
14
  # Then call into the schema to coerce those incoming values
15
15
  args = arg_owner.coerce_arguments(parent_object, args_hash, query.context)
16
16
 
17
- h3[parent_object] = if args.is_a?(GraphQL::Execution::Lazy)
18
- args.then { |resolved_args|
19
- # when this promise is resolved, update the cache with the resolved value
20
- h3[parent_object] = resolved_args
21
- }
22
- else
23
- args
17
+ h3[parent_object] = @query.schema.after_lazy(args) do |resolved_args|
18
+ # when this promise is resolved, update the cache with the resolved value
19
+ h3[parent_object] = resolved_args
24
20
  end
25
21
  end
26
22
  end
@@ -174,7 +174,14 @@ module GraphQL
174
174
  next
175
175
  end
176
176
 
177
- after_lazy(kwarg_arguments, owner: owner_type, field: field_defn, path: next_path, scoped_context: context.scoped_context, owner_object: object, arguments: kwarg_arguments) do |kwarg_arguments|
177
+ after_lazy(kwarg_arguments, owner: owner_type, field: field_defn, path: next_path, scoped_context: context.scoped_context, owner_object: object, arguments: kwarg_arguments) do |resolved_arguments|
178
+ if resolved_arguments.is_a? GraphQL::ExecutionError
179
+ continue_value(next_path, resolved_arguments, field_defn, return_type.non_null?, ast_node)
180
+ next
181
+ end
182
+
183
+ kwarg_arguments = resolved_arguments.keyword_arguments
184
+
178
185
  # It might turn out that making arguments for every field is slow.
179
186
  # If we have to cache them, we'll need a more subtle approach here.
180
187
  field_defn.extras.each do |extra|
@@ -194,6 +201,8 @@ module GraphQL
194
201
  ast_nodes: field_ast_nodes,
195
202
  field: field_defn,
196
203
  )
204
+ when :argument_details
205
+ kwarg_arguments[:argument_details] = resolved_arguments
197
206
  else
198
207
  kwarg_arguments[extra] = field_defn.fetch_extra(extra, context)
199
208
  end
@@ -369,11 +378,12 @@ module GraphQL
369
378
  end
370
379
  end
371
380
 
372
- def resolve_with_directives(object, ast_node)
373
- run_directive(object, ast_node, 0) { yield }
381
+ def resolve_with_directives(object, ast_node, &block)
382
+ return yield if ast_node.directives.empty?
383
+ run_directive(object, ast_node, 0, &block)
374
384
  end
375
385
 
376
- def run_directive(object, ast_node, idx)
386
+ def run_directive(object, ast_node, idx, &block)
377
387
  dir_node = ast_node.directives[idx]
378
388
  if !dir_node
379
389
  yield
@@ -382,9 +392,9 @@ module GraphQL
382
392
  if !dir_defn.is_a?(Class)
383
393
  dir_defn = dir_defn.type_class || raise("Only class-based directives are supported (not `@#{dir_node.name}`)")
384
394
  end
385
- dir_args = arguments(nil, dir_defn, dir_node)
395
+ dir_args = arguments(nil, dir_defn, dir_node).keyword_arguments
386
396
  dir_defn.resolve(object, dir_args, context) do
387
- run_directive(object, ast_node, idx + 1) { yield }
397
+ run_directive(object, ast_node, idx + 1, &block)
388
398
  end
389
399
  end
390
400
  end
@@ -393,7 +403,7 @@ module GraphQL
393
403
  def directives_include?(node, graphql_object, parent_type)
394
404
  node.directives.each do |dir_node|
395
405
  dir_defn = schema.directives.fetch(dir_node.name).type_class || raise("Only class-based directives are supported (not #{dir_node.name.inspect})")
396
- args = arguments(graphql_object, dir_defn, dir_node)
406
+ args = arguments(graphql_object, dir_defn, dir_node).keyword_arguments
397
407
  if !dir_defn.include?(graphql_object, args, context)
398
408
  return false
399
409
  end
@@ -407,7 +417,7 @@ module GraphQL
407
417
  # @param eager [Boolean] Set to `true` for mutation root fields only
408
418
  # @param trace [Boolean] If `false`, don't wrap this with field tracing
409
419
  # @return [GraphQL::Execution::Lazy, Object] If loading `object` will be deferred, it's a wrapper over it.
410
- def after_lazy(lazy_obj, owner:, field:, path:, scoped_context:, owner_object:, arguments:, eager: false, trace: true)
420
+ def after_lazy(lazy_obj, owner:, field:, path:, scoped_context:, owner_object:, arguments:, eager: false, trace: true, &block)
411
421
  @interpreter_context[:current_object] = owner_object
412
422
  @interpreter_context[:current_arguments] = arguments
413
423
  @interpreter_context[:current_path] = path
@@ -432,11 +442,9 @@ module GraphQL
432
442
  end
433
443
  end
434
444
  rescue GraphQL::ExecutionError, GraphQL::UnauthorizedError => err
435
- yield(err)
436
- end
437
- after_lazy(inner_obj, owner: owner, field: field, path: path, scoped_context: context.scoped_context, owner_object: owner_object, arguments: arguments, eager: eager) do |really_inner_obj|
438
- yield(really_inner_obj)
445
+ err
439
446
  end
447
+ after_lazy(inner_obj, owner: owner, field: field, path: path, scoped_context: context.scoped_context, owner_object: owner_object, arguments: arguments, eager: eager, trace: trace, &block)
440
448
  end
441
449
 
442
450
  if eager
@@ -55,7 +55,9 @@ module GraphQL
55
55
  @arguments
56
56
  else
57
57
  @arguments = if @field
58
- @query.arguments_for(@ast_nodes.first, @field)
58
+ @query.schema.after_lazy(@query.arguments_for(@ast_nodes.first, @field)) do |args|
59
+ args.is_a?(Execution::Interpreter::Arguments) ? args.keyword_arguments : args
60
+ end
59
61
  else
60
62
  nil
61
63
  end
@@ -66,11 +66,11 @@ module GraphQL
66
66
  # Call the block for each type in `self`.
67
67
  # This uses the simplest possible expression of `self`,
68
68
  # so if this scope is defined by an abstract type, it gets yielded.
69
- def each
69
+ def each(&block)
70
70
  if @abstract_type
71
71
  yield(@type)
72
72
  else
73
- @types.each { |t| yield(t) }
73
+ @types.each(&block)
74
74
  end
75
75
  end
76
76
 
@@ -23,11 +23,11 @@ module GraphQL
23
23
 
24
24
  # Traverse a node in a rewritten query tree,
25
25
  # visiting the node itself and each of its typed children.
26
- def each_node(node)
26
+ def each_node(node, &block)
27
27
  yield(node)
28
28
  node.typed_children.each do |obj_type, children|
29
29
  children.each do |name, node|
30
- each_node(node) { |n| yield(n) }
30
+ each_node(node, &block)
31
31
  end
32
32
  end
33
33
  end
@@ -74,8 +74,6 @@ module GraphQL
74
74
 
75
75
  def decode(data)
76
76
  @encoder.decode(data, nonce: true)
77
- rescue ArgumentError
78
- raise GraphQL::ExecutionError, "Invalid cursor: #{data.inspect}"
79
77
  end
80
78
 
81
79
  # The value passed as `first:`, if there was one. Negative numbers become `0`.
@@ -101,14 +101,12 @@ module GraphQL
101
101
  # - Right away, if `value` is not registered with `lazy_resolve`
102
102
  # - After resolving `value`, if it's registered with `lazy_resolve` (eg, `Promise`)
103
103
  # @api private
104
- def after_lazy(value)
104
+ def after_lazy(value, &block)
105
105
  if lazy?(value)
106
106
  GraphQL::Execution::Lazy.new do
107
107
  result = sync_lazy(value)
108
108
  # The returned result might also be lazy, so check it, too
109
- after_lazy(result) do |final_result|
110
- yield(final_result) if block_given?
111
- end
109
+ after_lazy(result, &block)
112
110
  end
113
111
  else
114
112
  yield(value) if block_given?
@@ -146,10 +144,10 @@ module GraphQL
146
144
  def after_any_lazies(maybe_lazies)
147
145
  if maybe_lazies.any? { |l| lazy?(l) }
148
146
  GraphQL::Execution::Lazy.all(maybe_lazies).then do |result|
149
- yield
147
+ yield result
150
148
  end
151
149
  else
152
- yield
150
+ yield maybe_lazies
153
151
  end
154
152
  end
155
153
  end
@@ -872,8 +870,8 @@ module GraphQL
872
870
  # Returns the JSON response of {Introspection::INTROSPECTION_QUERY}.
873
871
  # @see {#as_json}
874
872
  # @return [String]
875
- def to_json(*args)
876
- JSON.pretty_generate(as_json(*args))
873
+ def to_json(**args)
874
+ JSON.pretty_generate(as_json(**args))
877
875
  end
878
876
 
879
877
  # Return the Hash response of {Introspection::INTROSPECTION_QUERY}.
@@ -13,6 +13,8 @@ module GraphQL
13
13
  def self.decode(encoded_text, nonce: false)
14
14
  # urlsafe_decode64 is for forward compatibility
15
15
  Base64Bp.urlsafe_decode64(encoded_text)
16
+ rescue ArgumentError
17
+ raise GraphQL::ExecutionError, "Invalid input: #{encoded_text.inspect}"
16
18
  end
17
19
  end
18
20
  end
@@ -47,6 +47,11 @@ module GraphQL
47
47
  @resolver_class
48
48
  end
49
49
 
50
+ # @return [Boolean] Is this field a predefined introspection field?
51
+ def introspection?
52
+ @introspection
53
+ end
54
+
50
55
  alias :mutation :resolver
51
56
 
52
57
  # @return [Boolean] Apply tracing to this field? (Default: skip scalars, this is the override value)
@@ -663,7 +668,7 @@ module GraphQL
663
668
  loaded_value = if loads && !arg_defn.from_resolver?
664
669
  if arg_defn.type.list?
665
670
  loaded_values = value.map { |val| load_application_object(arg_defn, loads, val, field_ctx.query.context) }
666
- maybe_lazies.concat(loaded_values)
671
+ field_ctx.schema.after_any_lazies(loaded_values) { |result| result }
667
672
  else
668
673
  load_application_object(arg_defn, loads, value, field_ctx.query.context)
669
674
  end
@@ -10,12 +10,13 @@ module GraphQL
10
10
 
11
11
  include GraphQL::Dig
12
12
 
13
- def initialize(values = nil, ruby_kwargs: nil, context:, defaults_used:)
13
+ def initialize(arguments = nil, ruby_kwargs: nil, context:, defaults_used:)
14
14
  @context = context
15
15
  if ruby_kwargs
16
16
  @ruby_style_hash = ruby_kwargs
17
+ @arguments = arguments
17
18
  else
18
- @arguments = self.class.arguments_class.new(values, context: context, defaults_used: defaults_used)
19
+ @arguments = self.class.arguments_class.new(arguments, context: context, defaults_used: defaults_used)
19
20
  # Symbolized, underscored hash:
20
21
  @ruby_style_hash = @arguments.to_kwargs
21
22
  end
@@ -56,7 +57,7 @@ module GraphQL
56
57
  # @return [GraphQL::Query::Context] The context for this query
57
58
  attr_reader :context
58
59
 
59
- # @return [GraphQL::Query::Arguments] The underlying arguments instance
60
+ # @return [GraphQL::Query::Arguments, GraphQL::Execution::Interpereter::Arguments] The underlying arguments instance
60
61
  attr_reader :arguments
61
62
 
62
63
  # Ruby-like hash behaviors, read-only
@@ -208,10 +209,12 @@ module GraphQL
208
209
  return nil
209
210
  end
210
211
 
211
- input_values = coerce_arguments(nil, value, ctx)
212
+ arguments = coerce_arguments(nil, value, ctx)
212
213
 
213
- input_obj_instance = self.new(ruby_kwargs: input_values, context: ctx, defaults_used: nil)
214
- input_obj_instance.prepare
214
+ ctx.schema.after_lazy(arguments) do |resolved_arguments|
215
+ input_obj_instance = self.new(resolved_arguments, ruby_kwargs: resolved_arguments.keyword_arguments, context: ctx, defaults_used: nil)
216
+ input_obj_instance.prepare
217
+ end
215
218
  end
216
219
 
217
220
  # It's funny to think of a _result_ of an input object.
@@ -63,10 +63,12 @@ module GraphQL
63
63
  self.class.argument_class(new_arg_class)
64
64
  end
65
65
 
66
+ # @api private
66
67
  # @param values [Hash<String, Object>]
67
68
  # @param context [GraphQL::Query::Context]
68
- # @return Hash<Symbol, Object>
69
+ # @return [Hash<Symbol, Object>, Execution::Lazy<Hash>]
69
70
  def coerce_arguments(parent_object, values, context)
71
+ argument_values = {}
70
72
  kwarg_arguments = {}
71
73
  # Cache this hash to avoid re-merging it
72
74
  arg_defns = self.arguments
@@ -75,6 +77,7 @@ module GraphQL
75
77
  arg_lazies = arg_defns.map do |arg_name, arg_defn|
76
78
  arg_key = arg_defn.keyword
77
79
  has_value = false
80
+ default_used = false
78
81
  if values.key?(arg_name)
79
82
  has_value = true
80
83
  value = values[arg_name]
@@ -84,6 +87,7 @@ module GraphQL
84
87
  elsif arg_defn.default_value?
85
88
  has_value = true
86
89
  value = arg_defn.default_value
90
+ default_used = true
87
91
  end
88
92
 
89
93
  if has_value
@@ -91,33 +95,43 @@ module GraphQL
91
95
  loaded_value = nil
92
96
  if loads && !arg_defn.from_resolver?
93
97
  loaded_value = if arg_defn.type.list?
94
- value.map { |val| load_application_object(arg_defn, loads, val, context) }
98
+ loaded_values = value.map { |val| load_application_object(arg_defn, loads, val, context) }
99
+ context.schema.after_any_lazies(loaded_values) { |result| result }
95
100
  else
96
101
  load_application_object(arg_defn, loads, value, context)
97
102
  end
98
103
  end
99
104
 
100
- context.schema.after_lazy(loaded_value) do |loaded_value|
101
- coerced_value = nil
102
- prepared_value = context.schema.error_handler.with_error_handling(context) do
103
-
104
- coerced_value = if loaded_value
105
- loaded_value
106
- else
107
- arg_defn.type.coerce_input(value, context)
108
- end
105
+ coerced_value = if loaded_value
106
+ loaded_value
107
+ else
108
+ context.schema.error_handler.with_error_handling(context) do
109
+ arg_defn.type.coerce_input(value, context)
110
+ end
111
+ end
109
112
 
113
+ context.schema.after_lazy(coerced_value) do |coerced_value|
114
+ prepared_value = context.schema.error_handler.with_error_handling(context) do
110
115
  arg_defn.prepare_value(parent_object, coerced_value, context: context)
111
116
  end
112
117
 
113
- kwarg_arguments[arg_defn.keyword] = prepared_value
118
+ kwarg_arguments[arg_key] = prepared_value
119
+ # TODO code smell to access such a deeply-nested constant in a distant module
120
+ argument_values[arg_key] = GraphQL::Execution::Interpreter::ArgumentValue.new(
121
+ value: prepared_value,
122
+ definition: arg_defn,
123
+ default_used: default_used,
124
+ )
114
125
  end
115
126
  end
116
127
  end
117
128
 
118
129
  maybe_lazies.concat(arg_lazies)
119
130
  context.schema.after_any_lazies(maybe_lazies) do
120
- kwarg_arguments
131
+ GraphQL::Execution::Interpreter::Arguments.new(
132
+ keyword_arguments: kwarg_arguments,
133
+ argument_values: argument_values,
134
+ )
121
135
  end
122
136
  end
123
137
 
@@ -79,14 +79,14 @@ module GraphQL
79
79
  raise "#{int} cannot be implemented since it's not a GraphQL Interface. Use `include` for plain Ruby modules."
80
80
  end
81
81
 
82
- new_memberships << int.type_membership_class.new(int, self, options)
82
+ new_memberships << int.type_membership_class.new(int, self, **options)
83
83
 
84
84
  # Include the methods here,
85
85
  # `.fields` will use the inheritance chain
86
86
  # to find inherited fields
87
87
  include(int)
88
88
  elsif int.is_a?(GraphQL::InterfaceType)
89
- new_memberships << int.type_membership_class.new(int, self, options)
89
+ new_memberships << int.type_membership_class.new(int, self, **options)
90
90
  elsif int.is_a?(String) || int.is_a?(GraphQL::Schema::LateBoundType)
91
91
  if options.any?
92
92
  raise ArgumentError, "`implements(...)` doesn't support options with late-loaded types yet. Remove #{options} and open an issue to request this feature."
@@ -220,7 +220,7 @@ module GraphQL
220
220
  # or use it as a configuration method to assign a return type
221
221
  # instead of generating one.
222
222
  # TODO unify with {#null}
223
- # @param new_type [Class, nil] If a type definition class is provided, it will be used as the return type of the field
223
+ # @param new_type [Class, Array<Class>, nil] If a type definition class is provided, it will be used as the return type of the field
224
224
  # @param null [true, false] Whether or not the field may return `nil`
225
225
  # @return [Class] The type which this field returns.
226
226
  def type(new_type = nil, null: nil)
@@ -63,8 +63,9 @@ module GraphQL
63
63
  # @param key [String] The name of the event in GraphQL internals
64
64
  # @param metadata [Hash] Event-related metadata (can be anything)
65
65
  # @return [Object] Must return the value of the block
66
- def trace(key, metadata)
67
- call_tracers(0, key, metadata) { yield }
66
+ def trace(key, metadata, &block)
67
+ return yield if @tracers.empty?
68
+ call_tracers(0, key, metadata, &block)
68
69
  end
69
70
 
70
71
  private
@@ -76,11 +77,11 @@ module GraphQL
76
77
  # @param key [String] The current event name
77
78
  # @param metadata [Object] The current event object
78
79
  # @return Whatever the block returns
79
- def call_tracers(idx, key, metadata)
80
+ def call_tracers(idx, key, metadata, &block)
80
81
  if idx == @tracers.length
81
82
  yield
82
83
  else
83
- @tracers[idx].trace(key, metadata) { call_tracers(idx + 1, key, metadata) { yield } }
84
+ @tracers[idx].trace(key, metadata) { call_tracers(idx + 1, key, metadata, &block) }
84
85
  end
85
86
  end
86
87
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module GraphQL
3
- VERSION = "1.10.7"
3
+ VERSION = "1.10.8"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.7
4
+ version: 1.10.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Mosolgo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-16 00:00:00.000000000 Z
11
+ date: 2020-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -422,6 +422,8 @@ files:
422
422
  - lib/graphql/execution/flatten.rb
423
423
  - lib/graphql/execution/instrumentation.rb
424
424
  - lib/graphql/execution/interpreter.rb
425
+ - lib/graphql/execution/interpreter/argument_value.rb
426
+ - lib/graphql/execution/interpreter/arguments.rb
425
427
  - lib/graphql/execution/interpreter/arguments_cache.rb
426
428
  - lib/graphql/execution/interpreter/execution_errors.rb
427
429
  - lib/graphql/execution/interpreter/handles_raw_value.rb
@@ -746,7 +748,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
746
748
  - !ruby/object:Gem::Version
747
749
  version: '0'
748
750
  requirements: []
749
- rubygems_version: 3.0.3
751
+ rubygems_version: 3.1.2
750
752
  signing_key:
751
753
  specification_version: 4
752
754
  summary: A GraphQL language and runtime for Ruby