graphql 1.10.0.pre1 → 1.10.0.pre2

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.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/core.rb +1 -0
  3. data/lib/generators/graphql/install_generator.rb +1 -0
  4. data/lib/generators/graphql/mutation_generator.rb +1 -1
  5. data/lib/generators/graphql/templates/base_field.erb +0 -4
  6. data/lib/generators/graphql/templates/base_mutation.erb +8 -0
  7. data/lib/generators/graphql/templates/graphql_controller.erb +5 -0
  8. data/lib/generators/graphql/templates/mutation.erb +1 -1
  9. data/lib/generators/graphql/templates/schema.erb +1 -1
  10. data/lib/graphql.rb +4 -1
  11. data/lib/graphql/analysis/ast.rb +14 -13
  12. data/lib/graphql/analysis/ast/analyzer.rb +23 -4
  13. data/lib/graphql/analysis/ast/field_usage.rb +1 -1
  14. data/lib/graphql/analysis/ast/max_query_complexity.rb +3 -3
  15. data/lib/graphql/analysis/ast/max_query_depth.rb +7 -3
  16. data/lib/graphql/analysis/ast/query_complexity.rb +2 -2
  17. data/lib/graphql/analysis/ast/visitor.rb +3 -3
  18. data/lib/graphql/base_type.rb +1 -1
  19. data/lib/graphql/directive.rb +0 -1
  20. data/lib/graphql/directive/deprecated_directive.rb +1 -12
  21. data/lib/graphql/execution/errors.rb +4 -8
  22. data/lib/graphql/execution/interpreter.rb +5 -11
  23. data/lib/graphql/execution/interpreter/runtime.rb +56 -48
  24. data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
  25. data/lib/graphql/execution/lookahead.rb +5 -5
  26. data/lib/graphql/execution/multiplex.rb +10 -0
  27. data/lib/graphql/function.rb +1 -1
  28. data/lib/graphql/input_object_type.rb +3 -2
  29. data/lib/graphql/interface_type.rb +1 -1
  30. data/lib/graphql/introspection/base_object.rb +2 -5
  31. data/lib/graphql/introspection/directive_type.rb +1 -1
  32. data/lib/graphql/introspection/entry_points.rb +6 -6
  33. data/lib/graphql/introspection/schema_type.rb +1 -6
  34. data/lib/graphql/introspection/type_type.rb +5 -5
  35. data/lib/graphql/language.rb +1 -1
  36. data/lib/graphql/language/block_string.rb +2 -2
  37. data/lib/graphql/language/definition_slice.rb +21 -10
  38. data/lib/graphql/language/document_from_schema_definition.rb +42 -42
  39. data/lib/graphql/language/lexer.rb +49 -48
  40. data/lib/graphql/language/lexer.rl +49 -48
  41. data/lib/graphql/language/nodes.rb +11 -8
  42. data/lib/graphql/language/parser.rb +4 -1
  43. data/lib/graphql/language/parser.y +4 -1
  44. data/lib/graphql/language/token.rb +1 -1
  45. data/lib/graphql/pagination/array_connection.rb +0 -1
  46. data/lib/graphql/pagination/connection.rb +31 -10
  47. data/lib/graphql/pagination/connections.rb +7 -2
  48. data/lib/graphql/pagination/relation_connection.rb +1 -7
  49. data/lib/graphql/query.rb +9 -4
  50. data/lib/graphql/query/arguments.rb +8 -1
  51. data/lib/graphql/query/literal_input.rb +2 -1
  52. data/lib/graphql/query/variables.rb +5 -1
  53. data/lib/graphql/relay/base_connection.rb +3 -3
  54. data/lib/graphql/relay/relation_connection.rb +9 -5
  55. data/lib/graphql/schema.rb +699 -153
  56. data/lib/graphql/schema/argument.rb +20 -4
  57. data/lib/graphql/schema/build_from_definition.rb +64 -31
  58. data/lib/graphql/schema/built_in_types.rb +5 -5
  59. data/lib/graphql/schema/directive.rb +16 -1
  60. data/lib/graphql/schema/directive/deprecated.rb +18 -0
  61. data/lib/graphql/schema/directive/feature.rb +1 -1
  62. data/lib/graphql/schema/enum.rb +39 -3
  63. data/lib/graphql/schema/field.rb +39 -9
  64. data/lib/graphql/schema/field/connection_extension.rb +4 -4
  65. data/lib/graphql/schema/find_inherited_value.rb +13 -0
  66. data/lib/graphql/schema/finder.rb +13 -11
  67. data/lib/graphql/schema/input_object.rb +109 -1
  68. data/lib/graphql/schema/interface.rb +8 -7
  69. data/lib/graphql/schema/introspection_system.rb +104 -36
  70. data/lib/graphql/schema/late_bound_type.rb +1 -0
  71. data/lib/graphql/schema/list.rb +26 -0
  72. data/lib/graphql/schema/loader.rb +10 -4
  73. data/lib/graphql/schema/member.rb +3 -0
  74. data/lib/graphql/schema/member/base_dsl_methods.rb +23 -13
  75. data/lib/graphql/schema/member/build_type.rb +1 -1
  76. data/lib/graphql/schema/member/has_arguments.rb +2 -2
  77. data/lib/graphql/schema/member/has_fields.rb +15 -6
  78. data/lib/graphql/schema/member/instrumentation.rb +6 -1
  79. data/lib/graphql/schema/member/type_system_helpers.rb +1 -1
  80. data/lib/graphql/schema/member/validates_input.rb +33 -0
  81. data/lib/graphql/schema/non_null.rb +25 -0
  82. data/lib/graphql/schema/object.rb +14 -1
  83. data/lib/graphql/schema/printer.rb +4 -3
  84. data/lib/graphql/schema/relay_classic_mutation.rb +5 -1
  85. data/lib/graphql/schema/resolver.rb +20 -2
  86. data/lib/graphql/schema/scalar.rb +18 -3
  87. data/lib/graphql/schema/subscription.rb +1 -1
  88. data/lib/graphql/schema/timeout_middleware.rb +3 -2
  89. data/lib/graphql/schema/traversal.rb +1 -1
  90. data/lib/graphql/schema/type_expression.rb +22 -24
  91. data/lib/graphql/schema/validation.rb +17 -1
  92. data/lib/graphql/schema/warden.rb +46 -17
  93. data/lib/graphql/schema/wrapper.rb +1 -1
  94. data/lib/graphql/static_validation/base_visitor.rb +10 -6
  95. data/lib/graphql/static_validation/definition_dependencies.rb +21 -12
  96. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +4 -4
  97. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
  98. data/lib/graphql/static_validation/type_stack.rb +2 -2
  99. data/lib/graphql/static_validation/validator.rb +1 -1
  100. data/lib/graphql/subscriptions.rb +38 -13
  101. data/lib/graphql/subscriptions/event.rb +24 -7
  102. data/lib/graphql/subscriptions/instrumentation.rb +1 -1
  103. data/lib/graphql/subscriptions/subscription_root.rb +0 -1
  104. data/lib/graphql/tracing/active_support_notifications_tracing.rb +10 -10
  105. data/lib/graphql/tracing/platform_tracing.rb +1 -2
  106. data/lib/graphql/tracing/skylight_tracing.rb +1 -0
  107. data/lib/graphql/unresolved_type_error.rb +2 -2
  108. data/lib/graphql/upgrader/member.rb +1 -1
  109. data/lib/graphql/version.rb +1 -1
  110. metadata +5 -2
@@ -314,7 +314,7 @@ def self.run_lexer(query_string)
314
314
  begin
315
315
  te = p+1;
316
316
  begin
317
- emit(:RCURLY, ts, te, meta)
317
+ emit(:RCURLY, ts, te, meta, "}")
318
318
  end
319
319
 
320
320
  end
@@ -328,7 +328,7 @@ def self.run_lexer(query_string)
328
328
  begin
329
329
  te = p+1;
330
330
  begin
331
- emit(:LCURLY, ts, te, meta)
331
+ emit(:LCURLY, ts, te, meta, "{")
332
332
  end
333
333
 
334
334
  end
@@ -342,7 +342,7 @@ def self.run_lexer(query_string)
342
342
  begin
343
343
  te = p+1;
344
344
  begin
345
- emit(:RPAREN, ts, te, meta)
345
+ emit(:RPAREN, ts, te, meta, ")")
346
346
  end
347
347
 
348
348
  end
@@ -356,7 +356,7 @@ def self.run_lexer(query_string)
356
356
  begin
357
357
  te = p+1;
358
358
  begin
359
- emit(:LPAREN, ts, te, meta)
359
+ emit(:LPAREN, ts, te, meta, "(")
360
360
  end
361
361
 
362
362
  end
@@ -370,7 +370,7 @@ def self.run_lexer(query_string)
370
370
  begin
371
371
  te = p+1;
372
372
  begin
373
- emit(:RBRACKET, ts, te, meta)
373
+ emit(:RBRACKET, ts, te, meta, "]")
374
374
  end
375
375
 
376
376
  end
@@ -384,7 +384,7 @@ def self.run_lexer(query_string)
384
384
  begin
385
385
  te = p+1;
386
386
  begin
387
- emit(:LBRACKET, ts, te, meta)
387
+ emit(:LBRACKET, ts, te, meta, "[")
388
388
  end
389
389
 
390
390
  end
@@ -398,7 +398,7 @@ def self.run_lexer(query_string)
398
398
  begin
399
399
  te = p+1;
400
400
  begin
401
- emit(:COLON, ts, te, meta)
401
+ emit(:COLON, ts, te, meta, ":")
402
402
  end
403
403
 
404
404
  end
@@ -440,7 +440,7 @@ def self.run_lexer(query_string)
440
440
  begin
441
441
  te = p+1;
442
442
  begin
443
- emit(:VAR_SIGN, ts, te, meta)
443
+ emit(:VAR_SIGN, ts, te, meta, "$")
444
444
  end
445
445
 
446
446
  end
@@ -454,7 +454,7 @@ def self.run_lexer(query_string)
454
454
  begin
455
455
  te = p+1;
456
456
  begin
457
- emit(:DIR_SIGN, ts, te, meta)
457
+ emit(:DIR_SIGN, ts, te, meta, "@")
458
458
  end
459
459
 
460
460
  end
@@ -468,7 +468,7 @@ def self.run_lexer(query_string)
468
468
  begin
469
469
  te = p+1;
470
470
  begin
471
- emit(:ELLIPSIS, ts, te, meta)
471
+ emit(:ELLIPSIS, ts, te, meta, "...")
472
472
  end
473
473
 
474
474
  end
@@ -482,7 +482,7 @@ def self.run_lexer(query_string)
482
482
  begin
483
483
  te = p+1;
484
484
  begin
485
- emit(:EQUALS, ts, te, meta)
485
+ emit(:EQUALS, ts, te, meta, "=")
486
486
  end
487
487
 
488
488
  end
@@ -496,7 +496,7 @@ def self.run_lexer(query_string)
496
496
  begin
497
497
  te = p+1;
498
498
  begin
499
- emit(:BANG, ts, te, meta)
499
+ emit(:BANG, ts, te, meta, "!")
500
500
  end
501
501
 
502
502
  end
@@ -510,7 +510,7 @@ def self.run_lexer(query_string)
510
510
  begin
511
511
  te = p+1;
512
512
  begin
513
- emit(:PIPE, ts, te, meta)
513
+ emit(:PIPE, ts, te, meta, "|")
514
514
  end
515
515
 
516
516
  end
@@ -524,7 +524,7 @@ def self.run_lexer(query_string)
524
524
  begin
525
525
  te = p+1;
526
526
  begin
527
- emit(:AMP, ts, te, meta)
527
+ emit(:AMP, ts, te, meta, "&")
528
528
  end
529
529
 
530
530
  end
@@ -738,7 +738,7 @@ def self.run_lexer(query_string)
738
738
  begin
739
739
  p = ((te))-1;
740
740
  begin
741
- emit(:ON, ts, te, meta)
741
+ emit(:ON, ts, te, meta, "on")
742
742
  end
743
743
 
744
744
  end
@@ -746,7 +746,7 @@ def self.run_lexer(query_string)
746
746
  begin
747
747
  p = ((te))-1;
748
748
  begin
749
- emit(:FRAGMENT, ts, te, meta)
749
+ emit(:FRAGMENT, ts, te, meta, "fragment")
750
750
  end
751
751
 
752
752
  end
@@ -754,7 +754,7 @@ def self.run_lexer(query_string)
754
754
  begin
755
755
  p = ((te))-1;
756
756
  begin
757
- emit(:TRUE, ts, te, meta)
757
+ emit(:TRUE, ts, te, meta, "true")
758
758
  end
759
759
 
760
760
  end
@@ -762,7 +762,7 @@ def self.run_lexer(query_string)
762
762
  begin
763
763
  p = ((te))-1;
764
764
  begin
765
- emit(:FALSE, ts, te, meta)
765
+ emit(:FALSE, ts, te, meta, "false")
766
766
  end
767
767
 
768
768
  end
@@ -770,7 +770,7 @@ def self.run_lexer(query_string)
770
770
  begin
771
771
  p = ((te))-1;
772
772
  begin
773
- emit(:NULL, ts, te, meta)
773
+ emit(:NULL, ts, te, meta, "null")
774
774
  end
775
775
 
776
776
  end
@@ -778,7 +778,7 @@ def self.run_lexer(query_string)
778
778
  begin
779
779
  p = ((te))-1;
780
780
  begin
781
- emit(:QUERY, ts, te, meta)
781
+ emit(:QUERY, ts, te, meta, "query")
782
782
  end
783
783
 
784
784
  end
@@ -786,7 +786,7 @@ def self.run_lexer(query_string)
786
786
  begin
787
787
  p = ((te))-1;
788
788
  begin
789
- emit(:MUTATION, ts, te, meta)
789
+ emit(:MUTATION, ts, te, meta, "mutation")
790
790
  end
791
791
 
792
792
  end
@@ -794,7 +794,7 @@ def self.run_lexer(query_string)
794
794
  begin
795
795
  p = ((te))-1;
796
796
  begin
797
- emit(:SUBSCRIPTION, ts, te, meta)
797
+ emit(:SUBSCRIPTION, ts, te, meta, "subscription")
798
798
  end
799
799
 
800
800
  end
@@ -1371,11 +1371,11 @@ end
1371
1371
 
1372
1372
  def self.record_comment(ts, te, meta)
1373
1373
  token = GraphQL::Language::Token.new(
1374
- name: :COMMENT,
1375
- value: meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
1376
- line: meta[:line],
1377
- col: meta[:col],
1378
- prev_token: meta[:previous_token],
1374
+ :COMMENT,
1375
+ meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
1376
+ meta[:line],
1377
+ meta[:col],
1378
+ meta[:previous_token],
1379
1379
  )
1380
1380
 
1381
1381
  meta[:previous_token] = token
@@ -1383,13 +1383,14 @@ meta[:previous_token] = token
1383
1383
  meta[:col] += te - ts
1384
1384
  end
1385
1385
 
1386
- def self.emit(token_name, ts, te, meta)
1386
+ def self.emit(token_name, ts, te, meta, token_value = nil)
1387
+ token_value ||= meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING)
1387
1388
  meta[:tokens] << token = GraphQL::Language::Token.new(
1388
- name: token_name,
1389
- value: meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
1390
- line: meta[:line],
1391
- col: meta[:col],
1392
- prev_token: meta[:previous_token],
1389
+ token_name,
1390
+ token_value,
1391
+ meta[:line],
1392
+ meta[:col],
1393
+ meta[:previous_token],
1393
1394
  )
1394
1395
  meta[:previous_token] = token
1395
1396
  # Bump the column counter for the next token
@@ -1428,30 +1429,30 @@ end
1428
1429
  # (It's faster: https://bugs.ruby-lang.org/issues/8110)
1429
1430
  if !value.valid_encoding? || value !~ VALID_STRING
1430
1431
  meta[:tokens] << token = GraphQL::Language::Token.new(
1431
- name: :BAD_UNICODE_ESCAPE,
1432
- value: value,
1433
- line: meta[:line],
1434
- col: meta[:col],
1435
- prev_token: meta[:previous_token],
1432
+ :BAD_UNICODE_ESCAPE,
1433
+ value,
1434
+ meta[:line],
1435
+ meta[:col],
1436
+ meta[:previous_token],
1436
1437
  )
1437
1438
  else
1438
1439
  replace_escaped_characters_in_place(value)
1439
1440
 
1440
1441
  if !value.valid_encoding?
1441
1442
  meta[:tokens] << token = GraphQL::Language::Token.new(
1442
- name: :BAD_UNICODE_ESCAPE,
1443
- value: value,
1444
- line: meta[:line],
1445
- col: meta[:col],
1446
- prev_token: meta[:previous_token],
1443
+ :BAD_UNICODE_ESCAPE,
1444
+ value,
1445
+ meta[:line],
1446
+ meta[:col],
1447
+ meta[:previous_token],
1447
1448
  )
1448
1449
  else
1449
1450
  meta[:tokens] << token = GraphQL::Language::Token.new(
1450
- name: :STRING,
1451
- value: value,
1452
- line: meta[:line],
1453
- col: meta[:col],
1454
- prev_token: meta[:previous_token],
1451
+ :STRING,
1452
+ value,
1453
+ meta[:line],
1454
+ meta[:col],
1455
+ meta[:previous_token],
1455
1456
  )
1456
1457
  end
1457
1458
  end
@@ -67,14 +67,14 @@
67
67
  main := |*
68
68
  INT => { emit(:INT, ts, te, meta) };
69
69
  FLOAT => { emit(:FLOAT, ts, te, meta) };
70
- ON => { emit(:ON, ts, te, meta) };
71
- FRAGMENT => { emit(:FRAGMENT, ts, te, meta) };
72
- TRUE => { emit(:TRUE, ts, te, meta) };
73
- FALSE => { emit(:FALSE, ts, te, meta) };
74
- NULL => { emit(:NULL, ts, te, meta) };
75
- QUERY => { emit(:QUERY, ts, te, meta) };
76
- MUTATION => { emit(:MUTATION, ts, te, meta) };
77
- SUBSCRIPTION => { emit(:SUBSCRIPTION, ts, te, meta) };
70
+ ON => { emit(:ON, ts, te, meta, "on") };
71
+ FRAGMENT => { emit(:FRAGMENT, ts, te, meta, "fragment") };
72
+ TRUE => { emit(:TRUE, ts, te, meta, "true") };
73
+ FALSE => { emit(:FALSE, ts, te, meta, "false") };
74
+ NULL => { emit(:NULL, ts, te, meta, "null") };
75
+ QUERY => { emit(:QUERY, ts, te, meta, "query") };
76
+ MUTATION => { emit(:MUTATION, ts, te, meta, "mutation") };
77
+ SUBSCRIPTION => { emit(:SUBSCRIPTION, ts, te, meta, "subscription") };
78
78
  SCHEMA => { emit(:SCHEMA, ts, te, meta) };
79
79
  SCALAR => { emit(:SCALAR, ts, te, meta) };
80
80
  TYPE => { emit(:TYPE, ts, te, meta) };
@@ -85,22 +85,22 @@
85
85
  ENUM => { emit(:ENUM, ts, te, meta) };
86
86
  INPUT => { emit(:INPUT, ts, te, meta) };
87
87
  DIRECTIVE => { emit(:DIRECTIVE, ts, te, meta) };
88
- RCURLY => { emit(:RCURLY, ts, te, meta) };
89
- LCURLY => { emit(:LCURLY, ts, te, meta) };
90
- RPAREN => { emit(:RPAREN, ts, te, meta) };
91
- LPAREN => { emit(:LPAREN, ts, te, meta) };
92
- RBRACKET => { emit(:RBRACKET, ts, te, meta) };
93
- LBRACKET => { emit(:LBRACKET, ts, te, meta) };
94
- COLON => { emit(:COLON, ts, te, meta) };
88
+ RCURLY => { emit(:RCURLY, ts, te, meta, "}") };
89
+ LCURLY => { emit(:LCURLY, ts, te, meta, "{") };
90
+ RPAREN => { emit(:RPAREN, ts, te, meta, ")") };
91
+ LPAREN => { emit(:LPAREN, ts, te, meta, "(")};
92
+ RBRACKET => { emit(:RBRACKET, ts, te, meta, "]") };
93
+ LBRACKET => { emit(:LBRACKET, ts, te, meta, "[") };
94
+ COLON => { emit(:COLON, ts, te, meta, ":") };
95
95
  QUOTED_STRING => { emit_string(ts, te, meta, block: false) };
96
96
  BLOCK_STRING => { emit_string(ts, te, meta, block: true) };
97
- VAR_SIGN => { emit(:VAR_SIGN, ts, te, meta) };
98
- DIR_SIGN => { emit(:DIR_SIGN, ts, te, meta) };
99
- ELLIPSIS => { emit(:ELLIPSIS, ts, te, meta) };
100
- EQUALS => { emit(:EQUALS, ts, te, meta) };
101
- BANG => { emit(:BANG, ts, te, meta) };
102
- PIPE => { emit(:PIPE, ts, te, meta) };
103
- AMP => { emit(:AMP, ts, te, meta) };
97
+ VAR_SIGN => { emit(:VAR_SIGN, ts, te, meta, "$") };
98
+ DIR_SIGN => { emit(:DIR_SIGN, ts, te, meta, "@") };
99
+ ELLIPSIS => { emit(:ELLIPSIS, ts, te, meta, "...") };
100
+ EQUALS => { emit(:EQUALS, ts, te, meta, "=") };
101
+ BANG => { emit(:BANG, ts, te, meta, "!") };
102
+ PIPE => { emit(:PIPE, ts, te, meta, "|") };
103
+ AMP => { emit(:AMP, ts, te, meta, "&") };
104
104
  IDENTIFIER => { emit(:IDENTIFIER, ts, te, meta) };
105
105
  COMMENT => { record_comment(ts, te, meta) };
106
106
 
@@ -163,11 +163,11 @@ module GraphQL
163
163
 
164
164
  def self.record_comment(ts, te, meta)
165
165
  token = GraphQL::Language::Token.new(
166
- name: :COMMENT,
167
- value: meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
168
- line: meta[:line],
169
- col: meta[:col],
170
- prev_token: meta[:previous_token],
166
+ :COMMENT,
167
+ meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
168
+ meta[:line],
169
+ meta[:col],
170
+ meta[:previous_token],
171
171
  )
172
172
 
173
173
  meta[:previous_token] = token
@@ -175,13 +175,14 @@ module GraphQL
175
175
  meta[:col] += te - ts
176
176
  end
177
177
 
178
- def self.emit(token_name, ts, te, meta)
178
+ def self.emit(token_name, ts, te, meta, token_value = nil)
179
+ token_value ||= meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING)
179
180
  meta[:tokens] << token = GraphQL::Language::Token.new(
180
- name: token_name,
181
- value: meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
182
- line: meta[:line],
183
- col: meta[:col],
184
- prev_token: meta[:previous_token],
181
+ token_name,
182
+ token_value,
183
+ meta[:line],
184
+ meta[:col],
185
+ meta[:previous_token],
185
186
  )
186
187
  meta[:previous_token] = token
187
188
  # Bump the column counter for the next token
@@ -220,30 +221,30 @@ module GraphQL
220
221
  # (It's faster: https://bugs.ruby-lang.org/issues/8110)
221
222
  if !value.valid_encoding? || value !~ VALID_STRING
222
223
  meta[:tokens] << token = GraphQL::Language::Token.new(
223
- name: :BAD_UNICODE_ESCAPE,
224
- value: value,
225
- line: meta[:line],
226
- col: meta[:col],
227
- prev_token: meta[:previous_token],
224
+ :BAD_UNICODE_ESCAPE,
225
+ value,
226
+ meta[:line],
227
+ meta[:col],
228
+ meta[:previous_token],
228
229
  )
229
230
  else
230
231
  replace_escaped_characters_in_place(value)
231
232
 
232
233
  if !value.valid_encoding?
233
234
  meta[:tokens] << token = GraphQL::Language::Token.new(
234
- name: :BAD_UNICODE_ESCAPE,
235
- value: value,
236
- line: meta[:line],
237
- col: meta[:col],
238
- prev_token: meta[:previous_token],
235
+ :BAD_UNICODE_ESCAPE,
236
+ value,
237
+ meta[:line],
238
+ meta[:col],
239
+ meta[:previous_token],
239
240
  )
240
241
  else
241
242
  meta[:tokens] << token = GraphQL::Language::Token.new(
242
- name: :STRING,
243
- value: value,
244
- line: meta[:line],
245
- col: meta[:col],
246
- prev_token: meta[:previous_token],
243
+ :STRING,
244
+ value,
245
+ meta[:line],
246
+ meta[:col],
247
+ meta[:previous_token],
247
248
  )
248
249
  end
249
250
  end
@@ -28,7 +28,8 @@ module GraphQL
28
28
  def initialize(options={})
29
29
  if options.key?(:position_source)
30
30
  position_source = options.delete(:position_source)
31
- @line, @col = position_source.line_and_column
31
+ @line = position_source.line
32
+ @col = position_source.col
32
33
  end
33
34
 
34
35
  @filename = options.delete(:filename)
@@ -66,7 +67,7 @@ module GraphQL
66
67
 
67
68
  # @return [Symbol] the method to call on {Language::Visitor} for this node
68
69
  def visit_method
69
- raise NotImplementedError, "#{self.class.name}#visit_method shold return a symbol"
70
+ raise GraphQL::RequiredImplementationMissingError, "#{self.class.name}#visit_method shold return a symbol"
70
71
  end
71
72
 
72
73
  def position
@@ -350,6 +351,8 @@ module GraphQL
350
351
 
351
352
  # A single selection in a GraphQL query.
352
353
  class Field < AbstractNode
354
+ NONE = [].freeze
355
+
353
356
  scalar_methods :name, :alias
354
357
  children_methods({
355
358
  arguments: GraphQL::Language::Nodes::Argument,
@@ -360,13 +363,13 @@ module GraphQL
360
363
  # @!attribute selections
361
364
  # @return [Array<Nodes::Field>] Selections on this object (or empty array if this is a scalar field)
362
365
 
363
- def initialize_node(name: nil, arguments: [], directives: [], selections: [], **kwargs)
364
- @name = name
365
- @arguments = arguments
366
- @directives = directives
367
- @selections = selections
366
+ def initialize_node(attributes)
367
+ @name = attributes[:name]
368
+ @arguments = attributes[:arguments] || NONE
369
+ @directives = attributes[:directives] || NONE
370
+ @selections = attributes[:selections] || NONE
368
371
  # oops, alias is a keyword:
369
- @alias = kwargs.fetch(:alias, nil)
372
+ @alias = attributes[:alias]
370
373
  end
371
374
 
372
375
  # Override this because default is `:fields`