graphql 2.3.13 → 2.3.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/orm_mutations_base.rb +1 -1
  3. data/lib/generators/graphql/templates/base_resolver.erb +2 -0
  4. data/lib/generators/graphql/type_generator.rb +1 -1
  5. data/lib/graphql/analysis.rb +1 -1
  6. data/lib/graphql/execution/interpreter/resolve.rb +10 -6
  7. data/lib/graphql/language/comment.rb +18 -0
  8. data/lib/graphql/language/document_from_schema_definition.rb +38 -4
  9. data/lib/graphql/language/lexer.rb +15 -12
  10. data/lib/graphql/language/nodes.rb +22 -14
  11. data/lib/graphql/language/parser.rb +5 -0
  12. data/lib/graphql/language/printer.rb +23 -7
  13. data/lib/graphql/language.rb +6 -5
  14. data/lib/graphql/query.rb +1 -1
  15. data/lib/graphql/schema/argument.rb +13 -1
  16. data/lib/graphql/schema/enum.rb +1 -0
  17. data/lib/graphql/schema/enum_value.rb +9 -1
  18. data/lib/graphql/schema/field.rb +23 -3
  19. data/lib/graphql/schema/interface.rb +1 -0
  20. data/lib/graphql/schema/member/base_dsl_methods.rb +15 -0
  21. data/lib/graphql/schema/member/has_arguments.rb +2 -2
  22. data/lib/graphql/schema/member/has_fields.rb +2 -2
  23. data/lib/graphql/schema/resolver.rb +3 -4
  24. data/lib/graphql/schema/visibility/migration.rb +188 -0
  25. data/lib/graphql/schema/visibility/subset.rb +509 -0
  26. data/lib/graphql/schema/visibility.rb +30 -0
  27. data/lib/graphql/schema.rb +48 -41
  28. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +2 -0
  29. data/lib/graphql/testing/helpers.rb +1 -1
  30. data/lib/graphql/tracing/notifications_trace.rb +2 -2
  31. data/lib/graphql/version.rb +1 -1
  32. metadata +6 -4
  33. data/lib/graphql/schema/subset.rb +0 -509
  34. data/lib/graphql/schema/types_migration.rb +0 -187
@@ -45,8 +45,7 @@ require "graphql/schema/mutation"
45
45
  require "graphql/schema/has_single_input_argument"
46
46
  require "graphql/schema/relay_classic_mutation"
47
47
  require "graphql/schema/subscription"
48
- require "graphql/schema/subset"
49
- require "graphql/schema/types_migration"
48
+ require "graphql/schema/visibility"
50
49
 
51
50
  module GraphQL
52
51
  # A GraphQL schema which may be queried with {GraphQL::Query}.
@@ -205,24 +204,19 @@ module GraphQL
205
204
  @own_trace_modes ||= {}
206
205
  end
207
206
 
208
- module DefaultTraceClass
209
- end
210
-
211
- private_constant :DefaultTraceClass
212
-
213
207
  def build_trace_mode(mode)
214
208
  case mode
215
209
  when :default
216
210
  # Use the superclass's default mode if it has one, or else start an inheritance chain at the built-in base class.
217
- base_class = (superclass.respond_to?(:trace_class_for) && superclass.trace_class_for(mode)) || GraphQL::Tracing::Trace
218
- Class.new(base_class) do
211
+ base_class = (superclass.respond_to?(:trace_class_for) && superclass.trace_class_for(mode, build: true)) || GraphQL::Tracing::Trace
212
+ const_set(:DefaultTrace, Class.new(base_class) do
219
213
  include DefaultTraceClass
220
- end
214
+ end)
221
215
  when :default_backtrace
222
216
  schema_base_class = trace_class_for(:default, build: true)
223
- Class.new(schema_base_class) do
217
+ const_set(:DefaultTraceBacktrace, Class.new(schema_base_class) do
224
218
  include(GraphQL::Backtrace::Trace)
225
- end
219
+ end)
226
220
  else
227
221
  # First, see if the superclass has a custom-defined class for this.
228
222
  # Then, if it doesn't, use this class's default trace
@@ -339,8 +333,8 @@ module GraphQL
339
333
  # @return [Hash<String => Class>] A dictionary of type classes by their GraphQL name
340
334
  # @see get_type Which is more efficient for finding _one type_ by name, because it doesn't merge hashes.
341
335
  def types(context = GraphQL::Query::NullContext.instance)
342
- if use_schema_subset?
343
- return Subset.from_context(context, self).all_types_h
336
+ if use_schema_visibility?
337
+ return Visibility::Subset.from_context(context, self).all_types_h
344
338
  end
345
339
  all_types = non_introspection_types.merge(introspection_system.types)
346
340
  visible_types = {}
@@ -369,15 +363,15 @@ module GraphQL
369
363
  # @param type_name [String]
370
364
  # @return [Module, nil] A type, or nil if there's no type called `type_name`
371
365
  def get_type(type_name, context = GraphQL::Query::NullContext.instance)
372
- if use_schema_subset?
373
- return Subset.from_context(context, self).type(type_name)
366
+ if use_schema_visibility?
367
+ return Visibility::Subset.from_context(context, self).type(type_name)
374
368
  end
375
369
  local_entry = own_types[type_name]
376
370
  type_defn = case local_entry
377
371
  when nil
378
372
  nil
379
373
  when Array
380
- if context.respond_to?(:types) && context.types.is_a?(GraphQL::Schema::Subset)
374
+ if context.respond_to?(:types) && context.types.is_a?(GraphQL::Schema::Visibility::Subset)
381
375
  local_entry
382
376
  else
383
377
  visible_t = nil
@@ -435,7 +429,7 @@ module GraphQL
435
429
  if @query_object
436
430
  dup_defn = new_query_object || yield
437
431
  raise GraphQL::Error, "Second definition of `query(...)` (#{dup_defn.inspect}) is invalid, already configured with #{@query_object.inspect}"
438
- elsif use_schema_subset?
432
+ elsif use_schema_visibility?
439
433
  @query_object = block_given? ? lazy_load_block : new_query_object
440
434
  else
441
435
  @query_object = new_query_object || lazy_load_block.call
@@ -454,7 +448,7 @@ module GraphQL
454
448
  if @mutation_object
455
449
  dup_defn = new_mutation_object || yield
456
450
  raise GraphQL::Error, "Second definition of `mutation(...)` (#{dup_defn.inspect}) is invalid, already configured with #{@mutation_object.inspect}"
457
- elsif use_schema_subset?
451
+ elsif use_schema_visibility?
458
452
  @mutation_object = block_given? ? lazy_load_block : new_mutation_object
459
453
  else
460
454
  @mutation_object = new_mutation_object || lazy_load_block.call
@@ -473,10 +467,12 @@ module GraphQL
473
467
  if @subscription_object
474
468
  dup_defn = new_subscription_object || yield
475
469
  raise GraphQL::Error, "Second definition of `subscription(...)` (#{dup_defn.inspect}) is invalid, already configured with #{@subscription_object.inspect}"
476
- elsif use_schema_subset?
470
+ elsif use_schema_visibility?
477
471
  @subscription_object = block_given? ? lazy_load_block : new_subscription_object
472
+ add_subscription_extension_if_necessary
478
473
  else
479
474
  @subscription_object = new_subscription_object || lazy_load_block.call
475
+ add_subscription_extension_if_necessary
480
476
  add_type_and_traverse(@subscription_object, root: true)
481
477
  end
482
478
  nil
@@ -505,7 +501,7 @@ module GraphQL
505
501
  end
506
502
 
507
503
  def root_types
508
- if use_schema_subset?
504
+ if use_schema_visibility?
509
505
  [query, mutation, subscription].compact
510
506
  else
511
507
  @root_types
@@ -530,17 +526,17 @@ module GraphQL
530
526
  elsif superclass.respond_to?(:subset_class)
531
527
  superclass.subset_class
532
528
  else
533
- GraphQL::Schema::Subset
529
+ GraphQL::Schema::Visibility::Subset
534
530
  end
535
531
  end
536
532
 
537
- attr_writer :subset_class, :use_schema_subset
533
+ attr_writer :subset_class, :use_schema_visibility, :visibility
538
534
 
539
- def use_schema_subset?
540
- if defined?(@use_schema_subset)
541
- @use_schema_subset
542
- elsif superclass.respond_to?(:use_schema_subset?)
543
- superclass.use_schema_subset?
535
+ def use_schema_visibility?
536
+ if defined?(@use_schema_visibility)
537
+ @use_schema_visibility
538
+ elsif superclass.respond_to?(:use_schema_visibility?)
539
+ superclass.use_schema_visibility?
544
540
  else
545
541
  false
546
542
  end
@@ -550,11 +546,11 @@ module GraphQL
550
546
  # @return [Hash<String, Module>] All possible types, if no `type` is given.
551
547
  # @return [Array<Module>] Possible types for `type`, if it's given.
552
548
  def possible_types(type = nil, context = GraphQL::Query::NullContext.instance)
553
- if use_schema_subset?
549
+ if use_schema_visibility?
554
550
  if type
555
- return Subset.from_context(context, self).possible_types(type)
551
+ return Visibility::Subset.from_context(context, self).possible_types(type)
556
552
  else
557
- raise "Schema.possible_types is not implemented for `use_schema_subset?`"
553
+ raise "Schema.possible_types is not implemented for `use_schema_visibility?`"
558
554
  end
559
555
  end
560
556
  if type
@@ -787,13 +783,11 @@ module GraphQL
787
783
 
788
784
  attr_writer :validate_max_errors
789
785
 
790
- def validate_max_errors(new_validate_max_errors = nil)
791
- if new_validate_max_errors
792
- @validate_max_errors = new_validate_max_errors
793
- elsif defined?(@validate_max_errors)
794
- @validate_max_errors
786
+ def validate_max_errors(new_validate_max_errors = NOT_CONFIGURED)
787
+ if NOT_CONFIGURED.equal?(new_validate_max_errors)
788
+ defined?(@validate_max_errors) ? @validate_max_errors : find_inherited_value(:validate_max_errors)
795
789
  else
796
- find_inherited_value(:validate_max_errors)
790
+ @validate_max_errors = new_validate_max_errors
797
791
  end
798
792
  end
799
793
 
@@ -932,7 +926,7 @@ module GraphQL
932
926
  To add other types to your schema, you might want `extra_types`: https://graphql-ruby.org/schema/definition.html#extra-types
933
927
  ERR
934
928
  end
935
- add_type_and_traverse(new_orphan_types, root: false) unless use_schema_subset?
929
+ add_type_and_traverse(new_orphan_types, root: false) unless use_schema_visibility?
936
930
  own_orphan_types.concat(new_orphan_types.flatten)
937
931
  end
938
932
 
@@ -1191,7 +1185,7 @@ module GraphQL
1191
1185
  # @param new_directive [Class]
1192
1186
  # @return void
1193
1187
  def directive(new_directive)
1194
- if use_schema_subset?
1188
+ if use_schema_visibility?
1195
1189
  own_directives[new_directive.graphql_name] = new_directive
1196
1190
  else
1197
1191
  add_type_and_traverse(new_directive, root: false)
@@ -1461,8 +1455,17 @@ module GraphQL
1461
1455
  private
1462
1456
 
1463
1457
  def add_trace_options_for(mode, new_options)
1464
- t_opts = trace_options_for(mode)
1465
- t_opts.merge!(new_options)
1458
+ if mode == :default
1459
+ own_trace_modes.each do |mode_name, t_class|
1460
+ if t_class <= DefaultTraceClass
1461
+ t_opts = trace_options_for(mode_name)
1462
+ t_opts.merge!(new_options)
1463
+ end
1464
+ end
1465
+ else
1466
+ t_opts = trace_options_for(mode)
1467
+ t_opts.merge!(new_options)
1468
+ end
1466
1469
  nil
1467
1470
  end
1468
1471
 
@@ -1606,5 +1609,9 @@ module GraphQL
1606
1609
 
1607
1610
  # Install these here so that subclasses will also install it.
1608
1611
  self.connections = GraphQL::Pagination::Connections.new(schema: self)
1612
+
1613
+ # @api private
1614
+ module DefaultTraceClass
1615
+ end
1609
1616
  end
1610
1617
  end
@@ -19,6 +19,7 @@ module GraphQL
19
19
  GraphQL::Schema::Directive::FRAGMENT_DEFINITION => "fragment definitions",
20
20
  GraphQL::Schema::Directive::FRAGMENT_SPREAD => "fragment spreads",
21
21
  GraphQL::Schema::Directive::INLINE_FRAGMENT => "inline fragments",
22
+ GraphQL::Schema::Directive::VARIABLE_DEFINITION => "variable definitions",
22
23
  }
23
24
 
24
25
  SIMPLE_LOCATIONS = {
@@ -26,6 +27,7 @@ module GraphQL
26
27
  Nodes::InlineFragment => GraphQL::Schema::Directive::INLINE_FRAGMENT,
27
28
  Nodes::FragmentSpread => GraphQL::Schema::Directive::FRAGMENT_SPREAD,
28
29
  Nodes::FragmentDefinition => GraphQL::Schema::Directive::FRAGMENT_DEFINITION,
30
+ Nodes::VariableDefinition => GraphQL::Schema::Directive::VARIABLE_DEFINITION,
29
31
  }
30
32
 
31
33
  SIMPLE_LOCATION_NODES = SIMPLE_LOCATIONS.keys
@@ -91,7 +91,7 @@ module GraphQL
91
91
  end
92
92
  graphql_result
93
93
  else
94
- unfiltered_type = Schema::Subset.pass_thru(schema: schema, context: context).type(type_name)
94
+ unfiltered_type = Schema::Visibility::Subset.pass_thru(schema: schema, context: context).type(type_name)
95
95
  if unfiltered_type
96
96
  raise TypeNotVisibleError.new(type_name: type_name)
97
97
  else
@@ -33,8 +33,8 @@ module GraphQL
33
33
  "resolve_type_lazy" => "resolve_type.graphql",
34
34
  }.each do |trace_method, platform_key|
35
35
  module_eval <<-RUBY, __FILE__, __LINE__
36
- def #{trace_method}(**metadata, &blk)
37
- @notifications_engine.instrument("#{platform_key}", metadata, &blk)
36
+ def #{trace_method}(**metadata, &block)
37
+ @notifications_engine.instrument("#{platform_key}", metadata) { super(**metadata, &block) }
38
38
  end
39
39
  RUBY
40
40
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module GraphQL
3
- VERSION = "2.3.13"
3
+ VERSION = "2.3.15"
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.3.13
4
+ version: 2.3.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Mosolgo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-12 00:00:00.000000000 Z
11
+ date: 2024-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -382,6 +382,7 @@ files:
382
382
  - lib/graphql/language.rb
383
383
  - lib/graphql/language/block_string.rb
384
384
  - lib/graphql/language/cache.rb
385
+ - lib/graphql/language/comment.rb
385
386
  - lib/graphql/language/definition_slice.rb
386
387
  - lib/graphql/language/document_from_schema_definition.rb
387
388
  - lib/graphql/language/generation.rb
@@ -485,11 +486,9 @@ files:
485
486
  - lib/graphql/schema/resolver/has_payload_type.rb
486
487
  - lib/graphql/schema/scalar.rb
487
488
  - lib/graphql/schema/subscription.rb
488
- - lib/graphql/schema/subset.rb
489
489
  - lib/graphql/schema/timeout.rb
490
490
  - lib/graphql/schema/type_expression.rb
491
491
  - lib/graphql/schema/type_membership.rb
492
- - lib/graphql/schema/types_migration.rb
493
492
  - lib/graphql/schema/union.rb
494
493
  - lib/graphql/schema/unique_within_type.rb
495
494
  - lib/graphql/schema/validator.rb
@@ -502,6 +501,9 @@ files:
502
501
  - lib/graphql/schema/validator/length_validator.rb
503
502
  - lib/graphql/schema/validator/numericality_validator.rb
504
503
  - lib/graphql/schema/validator/required_validator.rb
504
+ - lib/graphql/schema/visibility.rb
505
+ - lib/graphql/schema/visibility/migration.rb
506
+ - lib/graphql/schema/visibility/subset.rb
505
507
  - lib/graphql/schema/warden.rb
506
508
  - lib/graphql/schema/wrapper.rb
507
509
  - lib/graphql/static_validation.rb