graphql 2.0.11 → 2.0.12

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: e9467c38d77e2174c83c1f74c8d4450cea047a5b4f8421b7c6c78323142c86c1
4
- data.tar.gz: 9b93dfe4b8e72ff80f25d6cd20d897d73a32ae423439d819f810c8db6d265165
3
+ metadata.gz: 3d299fcfe61f486f9370dac7dfcd66df417ca4697932d7861822fb12c61a5889
4
+ data.tar.gz: 45e03854d6248c63f80d3b80e141a28970303516ab5f78375d9d3362b9e04ba5
5
5
  SHA512:
6
- metadata.gz: 9cfce211f91fe24a0023add3f1e9e30e8ad66081c65d897053be6af6832bd8c413433a3a1721b6ccb5e670c91365d73d49b5d0c9912875b828860783536004a0
7
- data.tar.gz: 3ce2af311a09a7a14ba52386049640f8b34636b8380dcfba9874745e348bc30ef2bcec58ed783897c39447379b774b3e8e5b690c477223d9532092b7c0b13112
6
+ metadata.gz: d756a4c5213a8e17910233b0e472a037b6dad007676f5399f6192b93df53e78611915bd066ac619b59d7d44a0f35efbd7bb329cb4189246bce0c077f584b049b
7
+ data.tar.gz: 277f7623f5bcc351bed49b3e95156166e16a92c3041a905f1e88399b15839eff8a0c733c16f4ae33c82213a4a47c3184d5c763e43ac2ca01a613caa419000513
@@ -685,12 +685,16 @@ module GraphQL
685
685
  set_result(selection_result, result_name, r)
686
686
  r
687
687
  when "UNION", "INTERFACE"
688
- resolved_type_or_lazy, resolved_value = resolve_type(current_type, value, path)
689
- resolved_value ||= value
688
+ resolved_type_or_lazy = resolve_type(current_type, value, path)
689
+ after_lazy(resolved_type_or_lazy, owner: current_type, path: path, ast_node: ast_node, field: field, owner_object: owner_object, arguments: arguments, trace: false, result_name: result_name, result: selection_result) do |resolved_type_result|
690
+ if resolved_type_result.is_a?(Array) && resolved_type_result.length == 2
691
+ resolved_type, resolved_value = resolved_type_result
692
+ else
693
+ resolved_type = resolved_type_result
694
+ resolved_value = value
695
+ end
690
696
 
691
- after_lazy(resolved_type_or_lazy, owner: current_type, path: path, ast_node: ast_node, field: field, owner_object: owner_object, arguments: arguments, trace: false, result_name: result_name, result: selection_result) do |resolved_type|
692
697
  possible_types = query.possible_types(current_type)
693
-
694
698
  if !possible_types.include?(resolved_type)
695
699
  parent_type = field.owner_type
696
700
  err_class = current_type::UnresolvedTypeError
@@ -236,12 +236,15 @@ module GraphQL
236
236
  out = print_description(input_object_type)
237
237
  out << "input #{input_object_type.name}"
238
238
  out << print_directives(input_object_type.directives)
239
- out << " {\n"
240
- input_object_type.fields.each.with_index do |field, i|
241
- out << print_description(field, indent: ' ', first_in_block: i == 0)
242
- out << " #{print_input_value_definition(field)}\n"
239
+ if !input_object_type.fields.empty?
240
+ out << " {\n"
241
+ input_object_type.fields.each.with_index do |field, i|
242
+ out << print_description(field, indent: ' ', first_in_block: i == 0)
243
+ out << " #{print_input_value_definition(field)}\n"
244
+ end
245
+ out << "}"
243
246
  end
244
- out << "}"
247
+ out
245
248
  end
246
249
 
247
250
  def print_directive_definition(directive)
@@ -45,6 +45,10 @@ module GraphQL
45
45
  @query_analyzers
46
46
  end
47
47
 
48
+ def has_validated?
49
+ @has_validated == true
50
+ end
51
+
48
52
  private
49
53
 
50
54
  # If the pipeline wasn't run yet, run it.
data/lib/graphql/query.rb CHANGED
@@ -34,7 +34,16 @@ module GraphQL
34
34
  attr_accessor :operation_name
35
35
 
36
36
  # @return [Boolean] if false, static validation is skipped (execution behavior for invalid queries is undefined)
37
- attr_accessor :validate
37
+ attr_reader :validate
38
+
39
+ # @param new_validate [Boolean] if false, static validation is skipped. This can't be reasssigned after validation.
40
+ def validate=(new_validate)
41
+ if defined?(@validation_pipeline) && @validation_pipeline && @validation_pipeline.has_validated?
42
+ raise ArgumentError, "Can't reassign Query#validate= after validation has run, remove this assignment."
43
+ else
44
+ @validate = new_validate
45
+ end
46
+ end
38
47
 
39
48
  attr_writer :query_string
40
49
 
@@ -259,26 +259,26 @@ module GraphQL
259
259
  # If this isn't lazy, then the block returns eagerly and assigns the result here
260
260
  # If it _is_ lazy, then we write the lazy to the hash, then update it later
261
261
  argument_values[arg_key] = context.schema.after_lazy(coerced_value) do |resolved_coerced_value|
262
+ owner.validate_directive_argument(self, resolved_coerced_value)
263
+ prepared_value = begin
264
+ prepare_value(parent_object, resolved_coerced_value, context: context)
265
+ rescue StandardError => err
266
+ context.schema.handle_or_reraise(context, err)
267
+ end
268
+
262
269
  if loads && !from_resolver?
263
270
  loaded_value = begin
264
- load_and_authorize_value(owner, coerced_value, context)
271
+ load_and_authorize_value(owner, prepared_value, context)
265
272
  rescue StandardError => err
266
273
  context.schema.handle_or_reraise(context, err)
267
274
  end
268
275
  end
269
276
 
270
- maybe_loaded_value = loaded_value || resolved_coerced_value
277
+ maybe_loaded_value = loaded_value || prepared_value
271
278
  context.schema.after_lazy(maybe_loaded_value) do |resolved_loaded_value|
272
- owner.validate_directive_argument(self, resolved_loaded_value)
273
- prepared_value = begin
274
- prepare_value(parent_object, resolved_loaded_value, context: context)
275
- rescue StandardError => err
276
- context.schema.handle_or_reraise(context, err)
277
- end
278
-
279
279
  # TODO code smell to access such a deeply-nested constant in a distant module
280
280
  argument_values[arg_key] = GraphQL::Execution::Interpreter::ArgumentValue.new(
281
- value: prepared_value,
281
+ value: resolved_loaded_value,
282
282
  definition: self,
283
283
  default_used: default_used,
284
284
  )
@@ -323,8 +323,14 @@ module GraphQL
323
323
  end
324
324
  # Double-check that the located object is actually of this type
325
325
  # (Don't want to allow arbitrary access to objects this way)
326
- resolved_application_object_type = context.schema.resolve_type(argument.loads, application_object, context)
327
- context.schema.after_lazy(resolved_application_object_type) do |application_object_type|
326
+ maybe_lazy_resolve_type = context.schema.resolve_type(argument.loads, application_object, context)
327
+ context.schema.after_lazy(maybe_lazy_resolve_type) do |resolve_type_result|
328
+ if resolve_type_result.is_a?(Array) && resolve_type_result.size == 2
329
+ application_object_type, application_object = resolve_type_result
330
+ else
331
+ application_object_type = resolve_type_result
332
+ # application_object is already assigned
333
+ end
328
334
  possible_object_types = context.warden.possible_types(argument.loads)
329
335
  if !possible_object_types.include?(application_object_type)
330
336
  err = GraphQL::LoadApplicationObjectFailedError.new(argument: argument, id: id, object: application_object)
@@ -754,13 +754,21 @@ module GraphQL
754
754
  # rubocop:disable Lint/DuplicateMethods
755
755
  module ResolveTypeWithType
756
756
  def resolve_type(type, obj, ctx)
757
- first_resolved_type, resolved_value = if type.is_a?(Module) && type.respond_to?(:resolve_type)
757
+ maybe_lazy_resolve_type_result = if type.is_a?(Module) && type.respond_to?(:resolve_type)
758
758
  type.resolve_type(obj, ctx)
759
759
  else
760
760
  super
761
761
  end
762
762
 
763
- after_lazy(first_resolved_type) do |resolved_type|
763
+ after_lazy(maybe_lazy_resolve_type_result) do |resolve_type_result|
764
+ if resolve_type_result.is_a?(Array) && resolve_type_result.size == 2
765
+ resolved_type = resolve_type_result[0]
766
+ resolved_value = resolve_type_result[1]
767
+ else
768
+ resolved_type = resolve_type_result
769
+ resolved_value = obj
770
+ end
771
+
764
772
  if resolved_type.nil? || (resolved_type.is_a?(Module) && resolved_type.respond_to?(:kind))
765
773
  if resolved_value
766
774
  [resolved_type, resolved_value]
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module GraphQL
3
- VERSION = "2.0.11"
3
+ VERSION = "2.0.12"
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: 2.0.11
4
+ version: 2.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Mosolgo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-20 00:00:00.000000000 Z
11
+ date: 2022-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips