graphql 2.0.17.2 → 2.0.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/analysis/ast.rb +2 -2
  3. data/lib/graphql/backtrace/trace.rb +96 -0
  4. data/lib/graphql/backtrace/tracer.rb +1 -1
  5. data/lib/graphql/backtrace.rb +6 -1
  6. data/lib/graphql/execution/interpreter/arguments.rb +1 -1
  7. data/lib/graphql/execution/interpreter/arguments_cache.rb +2 -3
  8. data/lib/graphql/execution/interpreter/resolve.rb +19 -0
  9. data/lib/graphql/execution/interpreter/runtime.rb +254 -211
  10. data/lib/graphql/execution/interpreter.rb +9 -14
  11. data/lib/graphql/execution/lazy.rb +2 -4
  12. data/lib/graphql/execution/multiplex.rb +2 -1
  13. data/lib/graphql/filter.rb +7 -2
  14. data/lib/graphql/language/document_from_schema_definition.rb +25 -9
  15. data/lib/graphql/language/lexer.rb +216 -1505
  16. data/lib/graphql/language/nodes.rb +27 -9
  17. data/lib/graphql/language/parser.rb +509 -491
  18. data/lib/graphql/language/parser.y +43 -38
  19. data/lib/graphql/pagination/active_record_relation_connection.rb +0 -8
  20. data/lib/graphql/pagination/connection.rb +5 -5
  21. data/lib/graphql/query/context.rb +62 -31
  22. data/lib/graphql/query/null_context.rb +1 -1
  23. data/lib/graphql/query.rb +22 -5
  24. data/lib/graphql/schema/argument.rb +7 -9
  25. data/lib/graphql/schema/build_from_definition.rb +15 -3
  26. data/lib/graphql/schema/enum_value.rb +2 -5
  27. data/lib/graphql/schema/field.rb +44 -31
  28. data/lib/graphql/schema/field_extension.rb +1 -4
  29. data/lib/graphql/schema/find_inherited_value.rb +2 -7
  30. data/lib/graphql/schema/member/base_dsl_methods.rb +13 -11
  31. data/lib/graphql/schema/member/has_arguments.rb +1 -1
  32. data/lib/graphql/schema/member/has_ast_node.rb +12 -0
  33. data/lib/graphql/schema/member/has_deprecation_reason.rb +3 -4
  34. data/lib/graphql/schema/member/has_directives.rb +15 -10
  35. data/lib/graphql/schema/member/has_fields.rb +87 -37
  36. data/lib/graphql/schema/member/has_validators.rb +2 -2
  37. data/lib/graphql/schema/member/relay_shortcuts.rb +19 -0
  38. data/lib/graphql/schema/member/type_system_helpers.rb +1 -1
  39. data/lib/graphql/schema/object.rb +2 -4
  40. data/lib/graphql/schema/resolver/has_payload_type.rb +9 -9
  41. data/lib/graphql/schema/resolver.rb +4 -4
  42. data/lib/graphql/schema/timeout.rb +24 -28
  43. data/lib/graphql/schema/validator.rb +1 -1
  44. data/lib/graphql/schema/warden.rb +11 -2
  45. data/lib/graphql/schema.rb +72 -1
  46. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
  47. data/lib/graphql/static_validation/rules/fields_will_merge.rb +2 -2
  48. data/lib/graphql/static_validation/validator.rb +1 -1
  49. data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
  50. data/lib/graphql/tracing/appoptics_trace.rb +231 -0
  51. data/lib/graphql/tracing/appsignal_trace.rb +77 -0
  52. data/lib/graphql/tracing/data_dog_trace.rb +148 -0
  53. data/lib/graphql/tracing/legacy_trace.rb +65 -0
  54. data/lib/graphql/tracing/new_relic_trace.rb +75 -0
  55. data/lib/graphql/tracing/notifications_trace.rb +42 -0
  56. data/lib/graphql/tracing/platform_trace.rb +109 -0
  57. data/lib/graphql/tracing/platform_tracing.rb +15 -3
  58. data/lib/graphql/tracing/prometheus_trace.rb +89 -0
  59. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +1 -1
  60. data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
  61. data/lib/graphql/tracing/scout_trace.rb +72 -0
  62. data/lib/graphql/tracing/statsd_trace.rb +56 -0
  63. data/lib/graphql/tracing/trace.rb +75 -0
  64. data/lib/graphql/tracing.rb +16 -39
  65. data/lib/graphql/type_kinds.rb +6 -3
  66. data/lib/graphql/types/relay/base_connection.rb +1 -1
  67. data/lib/graphql/types/relay/connection_behaviors.rb +24 -2
  68. data/lib/graphql/types/relay/edge_behaviors.rb +16 -2
  69. data/lib/graphql/types/relay/node_behaviors.rb +7 -1
  70. data/lib/graphql/types/relay/page_info_behaviors.rb +7 -2
  71. data/lib/graphql/types/relay.rb +0 -1
  72. data/lib/graphql/version.rb +1 -1
  73. data/lib/graphql.rb +16 -9
  74. metadata +33 -8
  75. data/lib/graphql/language/lexer.rl +0 -280
  76. data/lib/graphql/types/relay/default_relay.rb +0 -27
@@ -2,6 +2,7 @@
2
2
  module GraphQL
3
3
  module Language
4
4
  module Nodes
5
+ NONE = GraphQL::EmptyObjects::EMPTY_ARRAY
5
6
  # {AbstractNode} is the base class for all nodes in a GraphQL AST.
6
7
  #
7
8
  # It provides some APIs for working with ASTs:
@@ -9,6 +10,7 @@ module GraphQL
9
10
  # - `scalars` returns all scalar (Ruby) values attached to this one. Used for comparing nodes.
10
11
  # - `to_query_string` turns an AST node into a GraphQL string
11
12
  class AbstractNode
13
+
12
14
  module DefinitionNode
13
15
  # This AST node's {#line} returns the first line, which may be the description.
14
16
  # @return [Integer] The first line of the definition (not the description)
@@ -28,8 +30,11 @@ module GraphQL
28
30
  def initialize(options = {})
29
31
  if options.key?(:position_source)
30
32
  position_source = options.delete(:position_source)
31
- @line = position_source.line
32
- @col = position_source.col
33
+ @line = position_source[1]
34
+ @col = position_source[2]
35
+ else
36
+ @line = options.delete(:line)
37
+ @col = options.delete(:col)
33
38
  end
34
39
 
35
40
  @filename = options.delete(:filename)
@@ -46,7 +51,7 @@ module GraphQL
46
51
  other.children == self.children
47
52
  end
48
53
 
49
- NO_CHILDREN = [].freeze
54
+ NO_CHILDREN = GraphQL::EmptyObjects::EMPTY_ARRAY
50
55
 
51
56
  # @return [Array<GraphQL::Language::Nodes::AbstractNode>] all nodes in the tree below this one
52
57
  def children
@@ -277,10 +282,17 @@ module GraphQL
277
282
  assignments = scalar_method_names.map { |m| "@#{m} = #{m}"} +
278
283
  @children_methods.keys.map { |m| "@#{m} = #{m}.freeze" }
279
284
 
285
+ keywords = scalar_method_names.map { |m| "#{m}: #{m}"} +
286
+ @children_methods.keys.map { |m| "#{m}: #{m}" }
287
+
280
288
  module_eval <<-RUBY, __FILE__, __LINE__
281
289
  def initialize_node #{arguments.join(", ")}
282
290
  #{assignments.join("\n")}
283
291
  end
292
+
293
+ def self.from_a(filename, line, col, #{(scalar_method_names + @children_methods.keys).join(", ")})
294
+ self.new(filename: filename, line: line, col: col, #{keywords.join(", ")})
295
+ end
284
296
  RUBY
285
297
  end
286
298
  end
@@ -328,8 +340,8 @@ module GraphQL
328
340
  attr_reader :description
329
341
  scalar_methods :name, :repeatable
330
342
  children_methods(
331
- locations: Nodes::DirectiveLocation,
332
343
  arguments: Nodes::Argument,
344
+ locations: Nodes::DirectiveLocation,
333
345
  )
334
346
  end
335
347
 
@@ -343,8 +355,6 @@ module GraphQL
343
355
 
344
356
  # A single selection in a GraphQL query.
345
357
  class Field < AbstractNode
346
- NONE = [].freeze
347
-
348
358
  scalar_methods :name, :alias
349
359
  children_methods({
350
360
  arguments: GraphQL::Language::Nodes::Argument,
@@ -364,6 +374,10 @@ module GraphQL
364
374
  @alias = attributes[:alias]
365
375
  end
366
376
 
377
+ def self.from_a(filename, line, col, graphql_alias, name, arguments, directives, selections) # rubocop:disable Metrics/ParameterLists
378
+ self.new(filename: filename, line: line, col: col, alias: graphql_alias, name: name, arguments: arguments, directives: directives, selections: selections)
379
+ end
380
+
367
381
  # Override this because default is `:fields`
368
382
  self.children_method_name = :selections
369
383
  end
@@ -382,6 +396,10 @@ module GraphQL
382
396
  @selections = selections
383
397
  end
384
398
 
399
+ def self.from_a(filename, line, col, name, type, directives, selections)
400
+ self.new(filename: filename, line: line, col: col, name: name, type: type, directives: directives, selections: selections)
401
+ end
402
+
385
403
  scalar_methods :name, :type
386
404
  children_methods({
387
405
  selections: GraphQL::Language::Nodes::Field,
@@ -406,8 +424,8 @@ module GraphQL
406
424
  class InlineFragment < AbstractNode
407
425
  scalar_methods :type
408
426
  children_methods({
409
- selections: GraphQL::Language::Nodes::Field,
410
427
  directives: GraphQL::Language::Nodes::Directive,
428
+ selections: GraphQL::Language::Nodes::Field,
411
429
  })
412
430
 
413
431
  self.children_method_name = :selections
@@ -486,8 +504,8 @@ module GraphQL
486
504
  scalar_methods :operation_type, :name
487
505
  children_methods({
488
506
  variables: GraphQL::Language::Nodes::VariableDefinition,
489
- selections: GraphQL::Language::Nodes::Field,
490
507
  directives: GraphQL::Language::Nodes::Directive,
508
+ selections: GraphQL::Language::Nodes::Field,
491
509
  })
492
510
 
493
511
  # @!attribute variables
@@ -593,8 +611,8 @@ module GraphQL
593
611
  attr_reader :description
594
612
  scalar_methods :name, :type
595
613
  children_methods({
596
- directives: GraphQL::Language::Nodes::Directive,
597
614
  arguments: GraphQL::Language::Nodes::InputValueDefinition,
615
+ directives: GraphQL::Language::Nodes::Directive,
598
616
  })
599
617
  self.children_method_name = :fields
600
618