graphql 2.1.15 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of graphql might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/graphql/dataloader/async_dataloader.rb +88 -0
- data/lib/graphql/dataloader/source.rb +5 -8
- data/lib/graphql/dataloader.rb +35 -21
- data/lib/graphql/language/lexer.rb +271 -177
- data/lib/graphql/language/nodes.rb +72 -57
- data/lib/graphql/language/parser.rb +686 -1986
- data/lib/graphql/language/printer.rb +16 -12
- data/lib/graphql/language/static_visitor.rb +33 -37
- data/lib/graphql/language/visitor.rb +55 -59
- data/lib/graphql/schema/argument.rb +5 -3
- data/lib/graphql/schema/build_from_definition.rb +7 -8
- data/lib/graphql/schema/directive.rb +1 -1
- data/lib/graphql/schema/enum_value.rb +1 -1
- data/lib/graphql/schema/field.rb +1 -1
- data/lib/graphql/schema/input_object.rb +6 -8
- data/lib/graphql/schema/interface.rb +2 -6
- data/lib/graphql/schema/member/has_directives.rb +1 -1
- data/lib/graphql/schema/member/has_fields.rb +1 -1
- data/lib/graphql/schema/member/has_interfaces.rb +1 -1
- data/lib/graphql/schema/member/scoped.rb +1 -1
- data/lib/graphql/schema/member/type_system_helpers.rb +1 -1
- data/lib/graphql/schema.rb +6 -5
- data/lib/graphql/testing/helpers.rb +125 -0
- data/lib/graphql/testing.rb +2 -0
- data/lib/graphql/tracing/appoptics_trace.rb +0 -4
- data/lib/graphql/tracing/appsignal_trace.rb +0 -4
- data/lib/graphql/tracing/data_dog_trace.rb +34 -25
- data/lib/graphql/tracing/data_dog_tracing.rb +21 -7
- data/lib/graphql/tracing/notifications_trace.rb +0 -4
- data/lib/graphql/tracing/platform_trace.rb +0 -5
- data/lib/graphql/tracing/prometheus_trace.rb +0 -4
- data/lib/graphql/tracing/scout_trace.rb +0 -3
- data/lib/graphql/tracing/statsd_trace.rb +0 -4
- data/lib/graphql/tracing/trace.rb +1 -0
- data/lib/graphql/types/relay/connection_behaviors.rb +1 -1
- data/lib/graphql/types/relay/edge_behaviors.rb +1 -1
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +1 -0
- metadata +21 -19
- data/lib/graphql/language/parser.y +0 -560
@@ -16,30 +16,30 @@ module GraphQL
|
|
16
16
|
# @return [Integer] The first line of the definition (not the description)
|
17
17
|
attr_reader :definition_line
|
18
18
|
|
19
|
-
def initialize(
|
20
|
-
@definition_line =
|
21
|
-
super(
|
19
|
+
def initialize(definition_line: nil, **_rest)
|
20
|
+
@definition_line = definition_line
|
21
|
+
super(**_rest)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
attr_reader :
|
25
|
+
attr_reader :filename
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
def initialize(options = {})
|
31
|
-
if options.key?(:position_source)
|
32
|
-
position_source = options.delete(:position_source)
|
33
|
-
@line = position_source[1]
|
34
|
-
@col = position_source[2]
|
35
|
-
else
|
36
|
-
@line = options.delete(:line)
|
37
|
-
@col = options.delete(:col)
|
38
|
-
end
|
27
|
+
def line
|
28
|
+
@line ||= (@source_string && @pos) ? @source_string[0..@pos].count("\n") + 1 : nil
|
29
|
+
end
|
39
30
|
|
40
|
-
|
31
|
+
def col
|
32
|
+
@col ||= if @source_string && @pos
|
33
|
+
if @pos == 0
|
34
|
+
1
|
35
|
+
else
|
36
|
+
@source_string[0..@pos].split("\n").last.length
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
41
40
|
|
42
|
-
|
41
|
+
def definition_line
|
42
|
+
@definition_line ||= (@source_string && @definition_pos) ? @source_string[0..@definition_pos].count("\n") + 1 : nil
|
43
43
|
end
|
44
44
|
|
45
45
|
# Value equality
|
@@ -138,8 +138,6 @@ module GraphQL
|
|
138
138
|
end
|
139
139
|
|
140
140
|
class << self
|
141
|
-
# rubocop:disable Development/NoEvalCop This eval takes static inputs at load-time
|
142
|
-
|
143
141
|
# Add a default `#visit_method` and `#children_method_name` using the class name
|
144
142
|
def inherited(child_class)
|
145
143
|
super
|
@@ -198,8 +196,8 @@ module GraphQL
|
|
198
196
|
module_eval <<-RUBY, __FILE__, __LINE__
|
199
197
|
# Singular method: create a node with these options
|
200
198
|
# and return a new `self` which includes that node in this list.
|
201
|
-
def merge_#{method_name.to_s.sub(/s$/, "")}(node_opts)
|
202
|
-
merge(#{method_name}: #{method_name} + [#{node_type.name}.new(node_opts)])
|
199
|
+
def merge_#{method_name.to_s.sub(/s$/, "")}(**node_opts)
|
200
|
+
merge(#{method_name}: #{method_name} + [#{node_type.name}.new(**node_opts)])
|
203
201
|
end
|
204
202
|
RUBY
|
205
203
|
end
|
@@ -228,13 +226,14 @@ module GraphQL
|
|
228
226
|
end
|
229
227
|
|
230
228
|
if defined?(@scalar_methods)
|
231
|
-
if
|
232
|
-
|
229
|
+
if !@initialize_was_generated
|
230
|
+
@initialize_was_generated = true
|
231
|
+
generate_initialize
|
233
232
|
else
|
234
233
|
# This method was defined manually
|
235
234
|
end
|
236
235
|
else
|
237
|
-
raise "Can't
|
236
|
+
raise "Can't generate_initialize because scalar_methods wasn't called; call it before children_methods"
|
238
237
|
end
|
239
238
|
end
|
240
239
|
|
@@ -263,7 +262,15 @@ module GraphQL
|
|
263
262
|
end
|
264
263
|
end
|
265
264
|
|
266
|
-
|
265
|
+
DEFAULT_INITIALIZE_OPTIONS = [
|
266
|
+
"line: nil",
|
267
|
+
"col: nil",
|
268
|
+
"pos: nil",
|
269
|
+
"filename: nil",
|
270
|
+
"source_string: nil",
|
271
|
+
]
|
272
|
+
|
273
|
+
def generate_initialize
|
267
274
|
scalar_method_names = @scalar_methods
|
268
275
|
# TODO: These probably should be scalar methods, but `types` returns an array
|
269
276
|
[:types, :description].each do |extra_method|
|
@@ -279,16 +286,27 @@ module GraphQL
|
|
279
286
|
return
|
280
287
|
else
|
281
288
|
arguments = scalar_method_names.map { |m| "#{m}: nil"} +
|
282
|
-
@children_methods.keys.map { |m| "#{m}: NO_CHILDREN" }
|
289
|
+
@children_methods.keys.map { |m| "#{m}: NO_CHILDREN" } +
|
290
|
+
DEFAULT_INITIALIZE_OPTIONS
|
283
291
|
|
284
292
|
assignments = scalar_method_names.map { |m| "@#{m} = #{m}"} +
|
285
293
|
@children_methods.keys.map { |m| "@#{m} = #{m}.freeze" }
|
286
294
|
|
295
|
+
if name.end_with?("Definition") && name != "FragmentDefinition"
|
296
|
+
arguments << "definition_pos: nil"
|
297
|
+
assignments << "@definition_pos = definition_pos"
|
298
|
+
end
|
299
|
+
|
287
300
|
keywords = scalar_method_names.map { |m| "#{m}: #{m}"} +
|
288
301
|
@children_methods.keys.map { |m| "#{m}: #{m}" }
|
289
302
|
|
290
303
|
module_eval <<-RUBY, __FILE__, __LINE__
|
291
|
-
def
|
304
|
+
def initialize(#{arguments.join(", ")})
|
305
|
+
@line = line
|
306
|
+
@col = col
|
307
|
+
@pos = pos
|
308
|
+
@filename = filename
|
309
|
+
@source_string = source_string
|
292
310
|
#{assignments.join("\n")}
|
293
311
|
end
|
294
312
|
|
@@ -298,7 +316,6 @@ module GraphQL
|
|
298
316
|
RUBY
|
299
317
|
end
|
300
318
|
end
|
301
|
-
# rubocop:enable Development/NoEvalCop
|
302
319
|
end
|
303
320
|
end
|
304
321
|
|
@@ -339,7 +356,6 @@ module GraphQL
|
|
339
356
|
end
|
340
357
|
|
341
358
|
class DirectiveDefinition < AbstractNode
|
342
|
-
include DefinitionNode
|
343
359
|
attr_reader :description
|
344
360
|
scalar_methods :name, :repeatable
|
345
361
|
children_methods(
|
@@ -368,17 +384,22 @@ module GraphQL
|
|
368
384
|
# @!attribute selections
|
369
385
|
# @return [Array<Nodes::Field>] Selections on this object (or empty array if this is a scalar field)
|
370
386
|
|
371
|
-
def
|
372
|
-
@name =
|
373
|
-
@arguments =
|
374
|
-
@directives =
|
375
|
-
@selections =
|
387
|
+
def initialize(name: nil, arguments: NONE, directives: NONE, selections: NONE, field_alias: nil, line: nil, col: nil, pos: nil, filename: nil, source_string: nil)
|
388
|
+
@name = name
|
389
|
+
@arguments = arguments || NONE
|
390
|
+
@directives = directives || NONE
|
391
|
+
@selections = selections || NONE
|
376
392
|
# oops, alias is a keyword:
|
377
|
-
@alias =
|
393
|
+
@alias = field_alias
|
394
|
+
@line = line
|
395
|
+
@col = col
|
396
|
+
@pos = pos
|
397
|
+
@filename = filename
|
398
|
+
@source_string = source_string
|
378
399
|
end
|
379
400
|
|
380
|
-
def self.from_a(filename, line, col,
|
381
|
-
self.new(filename: filename, line: line, col: col,
|
401
|
+
def self.from_a(filename, line, col, field_alias, name, arguments, directives, selections) # rubocop:disable Metrics/ParameterLists
|
402
|
+
self.new(filename: filename, line: line, col: col, field_alias: field_alias, name: name, arguments: arguments, directives: directives, selections: selections)
|
382
403
|
end
|
383
404
|
|
384
405
|
# Override this because default is `:fields`
|
@@ -387,29 +408,33 @@ module GraphQL
|
|
387
408
|
|
388
409
|
# A reusable fragment, defined at document-level.
|
389
410
|
class FragmentDefinition < AbstractNode
|
411
|
+
scalar_methods :name, :type
|
412
|
+
children_methods({
|
413
|
+
selections: GraphQL::Language::Nodes::Field,
|
414
|
+
directives: GraphQL::Language::Nodes::Directive,
|
415
|
+
})
|
416
|
+
|
417
|
+
self.children_method_name = :definitions
|
390
418
|
# @!attribute name
|
391
419
|
# @return [String] the identifier for this fragment, which may be applied with `...#{name}`
|
392
420
|
|
393
421
|
# @!attribute type
|
394
422
|
# @return [String] the type condition for this fragment (name of type which it may apply to)
|
395
|
-
def
|
423
|
+
def initialize(name: nil, type: nil, directives: NONE, selections: NONE, filename: nil, pos: nil, source_string: nil, line: nil, col: nil)
|
396
424
|
@name = name
|
397
425
|
@type = type
|
398
426
|
@directives = directives
|
399
427
|
@selections = selections
|
428
|
+
@filename = filename
|
429
|
+
@pos = pos
|
430
|
+
@source_string = source_string
|
431
|
+
@line = line
|
432
|
+
@col = col
|
400
433
|
end
|
401
434
|
|
402
435
|
def self.from_a(filename, line, col, name, type, directives, selections)
|
403
436
|
self.new(filename: filename, line: line, col: col, name: name, type: type, directives: directives, selections: selections)
|
404
437
|
end
|
405
|
-
|
406
|
-
scalar_methods :name, :type
|
407
|
-
children_methods({
|
408
|
-
selections: GraphQL::Language::Nodes::Field,
|
409
|
-
directives: GraphQL::Language::Nodes::Directive,
|
410
|
-
})
|
411
|
-
|
412
|
-
self.children_method_name = :definitions
|
413
438
|
end
|
414
439
|
|
415
440
|
# Application of a named fragment in a selection
|
@@ -565,7 +590,6 @@ module GraphQL
|
|
565
590
|
end
|
566
591
|
|
567
592
|
class SchemaDefinition < AbstractNode
|
568
|
-
include DefinitionNode
|
569
593
|
scalar_methods :query, :mutation, :subscription
|
570
594
|
children_methods({
|
571
595
|
directives: GraphQL::Language::Nodes::Directive,
|
@@ -582,7 +606,6 @@ module GraphQL
|
|
582
606
|
end
|
583
607
|
|
584
608
|
class ScalarTypeDefinition < AbstractNode
|
585
|
-
include DefinitionNode
|
586
609
|
attr_reader :description
|
587
610
|
scalar_methods :name
|
588
611
|
children_methods({
|
@@ -600,7 +623,6 @@ module GraphQL
|
|
600
623
|
end
|
601
624
|
|
602
625
|
class InputValueDefinition < AbstractNode
|
603
|
-
include DefinitionNode
|
604
626
|
attr_reader :description
|
605
627
|
scalar_methods :name, :type, :default_value
|
606
628
|
children_methods({
|
@@ -610,7 +632,6 @@ module GraphQL
|
|
610
632
|
end
|
611
633
|
|
612
634
|
class FieldDefinition < AbstractNode
|
613
|
-
include DefinitionNode
|
614
635
|
attr_reader :description
|
615
636
|
scalar_methods :name, :type
|
616
637
|
children_methods({
|
@@ -631,7 +652,6 @@ module GraphQL
|
|
631
652
|
end
|
632
653
|
|
633
654
|
class ObjectTypeDefinition < AbstractNode
|
634
|
-
include DefinitionNode
|
635
655
|
attr_reader :description
|
636
656
|
scalar_methods :name, :interfaces
|
637
657
|
children_methods({
|
@@ -651,7 +671,6 @@ module GraphQL
|
|
651
671
|
end
|
652
672
|
|
653
673
|
class InterfaceTypeDefinition < AbstractNode
|
654
|
-
include DefinitionNode
|
655
674
|
attr_reader :description
|
656
675
|
scalar_methods :name
|
657
676
|
children_methods({
|
@@ -673,7 +692,6 @@ module GraphQL
|
|
673
692
|
end
|
674
693
|
|
675
694
|
class UnionTypeDefinition < AbstractNode
|
676
|
-
include DefinitionNode
|
677
695
|
attr_reader :description, :types
|
678
696
|
scalar_methods :name
|
679
697
|
children_methods({
|
@@ -692,7 +710,6 @@ module GraphQL
|
|
692
710
|
end
|
693
711
|
|
694
712
|
class EnumValueDefinition < AbstractNode
|
695
|
-
include DefinitionNode
|
696
713
|
attr_reader :description
|
697
714
|
scalar_methods :name
|
698
715
|
children_methods({
|
@@ -702,7 +719,6 @@ module GraphQL
|
|
702
719
|
end
|
703
720
|
|
704
721
|
class EnumTypeDefinition < AbstractNode
|
705
|
-
include DefinitionNode
|
706
722
|
attr_reader :description
|
707
723
|
scalar_methods :name
|
708
724
|
children_methods({
|
@@ -722,7 +738,6 @@ module GraphQL
|
|
722
738
|
end
|
723
739
|
|
724
740
|
class InputObjectTypeDefinition < AbstractNode
|
725
|
-
include DefinitionNode
|
726
741
|
attr_reader :description
|
727
742
|
scalar_methods :name
|
728
743
|
children_methods({
|