graphql 1.7.14 → 1.8.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +5 -5
  2. data/lib/generators/graphql/function_generator.rb +1 -1
  3. data/lib/generators/graphql/loader_generator.rb +1 -1
  4. data/lib/generators/graphql/mutation_generator.rb +1 -6
  5. data/lib/generators/graphql/templates/function.erb +2 -2
  6. data/lib/generators/graphql/templates/loader.erb +2 -2
  7. data/lib/graphql.rb +2 -0
  8. data/lib/graphql/argument.rb +0 -1
  9. data/lib/graphql/backwards_compatibility.rb +2 -3
  10. data/lib/graphql/base_type.rb +18 -16
  11. data/lib/graphql/compatibility/query_parser_specification.rb +0 -117
  12. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -14
  13. data/lib/graphql/define/assign_object_field.rb +5 -12
  14. data/lib/graphql/deprecated_dsl.rb +28 -0
  15. data/lib/graphql/directive.rb +0 -1
  16. data/lib/graphql/enum_type.rb +1 -3
  17. data/lib/graphql/execution.rb +0 -1
  18. data/lib/graphql/execution/multiplex.rb +29 -12
  19. data/lib/graphql/field.rb +5 -20
  20. data/lib/graphql/function.rb +12 -0
  21. data/lib/graphql/input_object_type.rb +1 -3
  22. data/lib/graphql/internal_representation/node.rb +14 -26
  23. data/lib/graphql/internal_representation/visit.rb +6 -3
  24. data/lib/graphql/introspection/arguments_field.rb +0 -1
  25. data/lib/graphql/introspection/enum_values_field.rb +0 -1
  26. data/lib/graphql/introspection/fields_field.rb +0 -1
  27. data/lib/graphql/introspection/input_fields_field.rb +0 -1
  28. data/lib/graphql/introspection/interfaces_field.rb +0 -1
  29. data/lib/graphql/introspection/of_type_field.rb +0 -1
  30. data/lib/graphql/introspection/possible_types_field.rb +0 -1
  31. data/lib/graphql/introspection/schema_field.rb +0 -1
  32. data/lib/graphql/introspection/type_by_name_field.rb +0 -1
  33. data/lib/graphql/introspection/typename_field.rb +0 -1
  34. data/lib/graphql/language.rb +0 -3
  35. data/lib/graphql/language/generation.rb +182 -3
  36. data/lib/graphql/language/lexer.rb +69 -144
  37. data/lib/graphql/language/lexer.rl +4 -15
  38. data/lib/graphql/language/nodes.rb +76 -136
  39. data/lib/graphql/language/parser.rb +621 -668
  40. data/lib/graphql/language/parser.y +11 -17
  41. data/lib/graphql/language/token.rb +3 -10
  42. data/lib/graphql/object_type.rb +6 -1
  43. data/lib/graphql/query.rb +13 -8
  44. data/lib/graphql/query/arguments.rb +33 -48
  45. data/lib/graphql/query/context.rb +1 -0
  46. data/lib/graphql/query/literal_input.rb +1 -4
  47. data/lib/graphql/relay/connection_resolve.rb +3 -0
  48. data/lib/graphql/relay/global_id_resolve.rb +5 -1
  49. data/lib/graphql/relay/relation_connection.rb +19 -14
  50. data/lib/graphql/schema.rb +219 -12
  51. data/lib/graphql/schema/argument.rb +33 -0
  52. data/lib/graphql/schema/build_from_definition.rb +18 -64
  53. data/lib/graphql/schema/enum.rb +76 -0
  54. data/lib/graphql/schema/field.rb +127 -0
  55. data/lib/graphql/schema/field/dynamic_resolve.rb +63 -0
  56. data/lib/graphql/schema/field/unwrapped_resolve.rb +20 -0
  57. data/lib/graphql/schema/input_object.rb +61 -0
  58. data/lib/graphql/schema/interface.rb +32 -0
  59. data/lib/graphql/schema/loader.rb +2 -2
  60. data/lib/graphql/schema/member.rb +97 -0
  61. data/lib/graphql/schema/member/build_type.rb +106 -0
  62. data/lib/graphql/schema/member/has_fields.rb +56 -0
  63. data/lib/graphql/schema/member/instrumentation.rb +113 -0
  64. data/lib/graphql/schema/member/list_type_proxy.rb +21 -0
  65. data/lib/graphql/schema/member/non_null_type_proxy.rb +21 -0
  66. data/lib/graphql/schema/object.rb +65 -0
  67. data/lib/graphql/schema/printer.rb +266 -33
  68. data/lib/graphql/schema/scalar.rb +25 -0
  69. data/lib/graphql/schema/traversal.rb +26 -17
  70. data/lib/graphql/schema/union.rb +48 -0
  71. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +1 -5
  72. data/lib/graphql/static_validation/rules/fields_will_merge.rb +8 -15
  73. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +1 -11
  74. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +5 -7
  75. data/lib/graphql/tracing.rb +0 -1
  76. data/lib/graphql/tracing/platform_tracing.rb +7 -20
  77. data/lib/graphql/tracing/scout_tracing.rb +2 -2
  78. data/lib/graphql/unresolved_type_error.rb +2 -3
  79. data/lib/graphql/version.rb +1 -1
  80. data/readme.md +1 -1
  81. data/spec/dummy/app/channels/graphql_channel.rb +1 -22
  82. data/spec/dummy/log/development.log +0 -239
  83. data/spec/dummy/log/test.log +0 -204
  84. data/spec/dummy/test/system/action_cable_subscription_test.rb +0 -4
  85. data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
  86. data/spec/generators/graphql/function_generator_spec.rb +0 -26
  87. data/spec/generators/graphql/loader_generator_spec.rb +0 -24
  88. data/spec/graphql/analysis/max_query_complexity_spec.rb +3 -3
  89. data/spec/graphql/analysis/max_query_depth_spec.rb +3 -3
  90. data/spec/graphql/backtrace_spec.rb +0 -10
  91. data/spec/graphql/base_type_spec.rb +5 -19
  92. data/spec/graphql/boolean_type_spec.rb +3 -3
  93. data/spec/graphql/directive_spec.rb +1 -3
  94. data/spec/graphql/enum_type_spec.rb +5 -18
  95. data/spec/graphql/execution/execute_spec.rb +1 -1
  96. data/spec/graphql/execution/multiplex_spec.rb +2 -2
  97. data/spec/graphql/float_type_spec.rb +2 -2
  98. data/spec/graphql/id_type_spec.rb +1 -1
  99. data/spec/graphql/input_object_type_spec.rb +2 -15
  100. data/spec/graphql/int_type_spec.rb +2 -2
  101. data/spec/graphql/internal_representation/rewrite_spec.rb +2 -2
  102. data/spec/graphql/introspection/schema_type_spec.rb +0 -1
  103. data/spec/graphql/language/generation_spec.rb +186 -21
  104. data/spec/graphql/language/lexer_spec.rb +1 -21
  105. data/spec/graphql/language/nodes_spec.rb +12 -21
  106. data/spec/graphql/language/parser_spec.rb +1 -1
  107. data/spec/graphql/query/arguments_spec.rb +15 -37
  108. data/spec/graphql/query/serial_execution/value_resolution_spec.rb +2 -2
  109. data/spec/graphql/query/variables_spec.rb +1 -1
  110. data/spec/graphql/query_spec.rb +5 -31
  111. data/spec/graphql/rake_task_spec.rb +1 -3
  112. data/spec/graphql/relay/base_connection_spec.rb +1 -1
  113. data/spec/graphql/relay/connection_instrumentation_spec.rb +2 -2
  114. data/spec/graphql/relay/connection_resolve_spec.rb +1 -1
  115. data/spec/graphql/relay/connection_type_spec.rb +1 -1
  116. data/spec/graphql/relay/mutation_spec.rb +3 -3
  117. data/spec/graphql/relay/relation_connection_spec.rb +1 -65
  118. data/spec/graphql/schema/build_from_definition_spec.rb +4 -86
  119. data/spec/graphql/schema/enum_spec.rb +60 -0
  120. data/spec/graphql/schema/field_spec.rb +14 -0
  121. data/spec/graphql/schema/input_object_spec.rb +43 -0
  122. data/spec/graphql/schema/interface_spec.rb +98 -0
  123. data/spec/graphql/schema/object_spec.rb +119 -0
  124. data/spec/graphql/schema/printer_spec.rb +15 -92
  125. data/spec/graphql/schema/scalar_spec.rb +40 -0
  126. data/spec/graphql/schema/union_spec.rb +35 -0
  127. data/spec/graphql/schema/validation_spec.rb +1 -1
  128. data/spec/graphql/schema/warden_spec.rb +11 -11
  129. data/spec/graphql/schema_spec.rb +25 -23
  130. data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +2 -10
  131. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +2 -2
  132. data/spec/graphql/string_type_spec.rb +3 -3
  133. data/spec/graphql/subscriptions_spec.rb +1 -1
  134. data/spec/graphql/tracing/platform_tracing_spec.rb +1 -60
  135. data/spec/support/dummy/schema.rb +25 -39
  136. data/spec/support/jazz.rb +334 -0
  137. data/spec/support/lazy_helpers.rb +21 -23
  138. data/spec/support/star_wars/data.rb +7 -6
  139. data/spec/support/star_wars/schema.rb +109 -142
  140. metadata +39 -33
  141. data/lib/graphql/execution/instrumentation.rb +0 -82
  142. data/lib/graphql/language/block_string.rb +0 -47
  143. data/lib/graphql/language/document_from_schema_definition.rb +0 -277
  144. data/lib/graphql/language/printer.rb +0 -351
  145. data/lib/graphql/tracing/data_dog_tracing.rb +0 -49
  146. data/spec/graphql/execution/instrumentation_spec.rb +0 -165
  147. data/spec/graphql/language/block_string_spec.rb +0 -70
  148. data/spec/graphql/language/document_from_schema_definition_spec.rb +0 -770
  149. data/spec/graphql/language/printer_spec.rb +0 -203
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+ module GraphQL
3
+ class Schema
4
+ class Scalar < GraphQL::Schema::Member
5
+ class << self
6
+ def coerce_input(val, ctx)
7
+ raise NotImplementedError, "#{self.name}.coerce_input(val, ctx) must prepare GraphQL input (#{val.inspect}) for Ruby processing"
8
+ end
9
+
10
+ def coerce_result(val, ctx)
11
+ raise NotImplementedError, "#{self.name}.coerce_result(val, ctx) must prepare Ruby value (#{val.inspect}) for GraphQL response"
12
+ end
13
+
14
+ def to_graphql
15
+ type_defn = GraphQL::ScalarType.new
16
+ type_defn.name = graphql_name
17
+ type_defn.description = description
18
+ type_defn.coerce_result = method(:coerce_result)
19
+ type_defn.coerce_input = method(:coerce_input)
20
+ type_defn
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -29,15 +29,15 @@ module GraphQL
29
29
  @instrumented_field_map = Hash.new { |h, k| h[k] = {} }
30
30
  @type_reference_map = Hash.new { |h, k| h[k] = [] }
31
31
  @union_memberships = Hash.new { |h, k| h[k] = [] }
32
- visit(schema, nil)
32
+ visit(schema, schema, nil)
33
33
  end
34
34
 
35
35
  private
36
36
 
37
- def visit(member, context_description)
37
+ def visit(schema, member, context_description)
38
38
  case member
39
39
  when GraphQL::Schema
40
- member.directives.each { |name, directive| visit(directive, "Directive #{name}") }
40
+ member.directives.each { |name, directive| visit(schema, directive, "Directive #{name}") }
41
41
  # Find the starting points, then visit them
42
42
  visit_roots = [member.query, member.mutation, member.subscription]
43
43
  if @introspection
@@ -45,16 +45,16 @@ module GraphQL
45
45
  if member.query
46
46
  # Visit this so that arguments class is preconstructed
47
47
  # Skip validation since it begins with __
48
- visit_field_on_type(member.query, GraphQL::Introspection::TypeByNameField, dynamic_field: true)
48
+ visit_field_on_type(schema, member.query, GraphQL::Introspection::TypeByNameField, dynamic_field: true)
49
49
  end
50
50
  end
51
51
  visit_roots.concat(member.orphan_types)
52
52
  visit_roots.compact!
53
- visit_roots.each { |t| visit(t, t.name) }
53
+ visit_roots.each { |t| visit(schema, t, t.name) }
54
54
  when GraphQL::Directive
55
55
  member.arguments.each do |name, argument|
56
56
  @type_reference_map[argument.type.unwrap.to_s] << argument
57
- visit(argument.type, "Directive argument #{member.name}.#{name}")
57
+ visit(schema, argument.type, "Directive argument #{member.name}.#{name}")
58
58
  end
59
59
  # Construct arguments class here, which is later used to generate GraphQL::Query::Arguments
60
60
  # to be passed to a resolver proc
@@ -68,42 +68,51 @@ module GraphQL
68
68
  @type_map[type_defn.name] = type_defn
69
69
  case type_defn
70
70
  when GraphQL::ObjectType
71
- type_defn.interfaces.each { |i| visit(i, "Interface on #{type_defn.name}") }
72
- visit_fields(type_defn)
71
+ type_defn.interfaces.each { |i| visit(schema, i, "Interface on #{type_defn.name}") }
72
+ visit_fields(schema, type_defn)
73
73
  when GraphQL::InterfaceType
74
- visit_fields(type_defn)
74
+ visit_fields(schema, type_defn)
75
75
  when GraphQL::UnionType
76
76
  type_defn.possible_types.each do |t|
77
77
  @union_memberships[t.name] << type_defn
78
- visit(t, "Possible type for #{type_defn.name}")
78
+ visit(schema, t, "Possible type for #{type_defn.name}")
79
79
  end
80
80
  when GraphQL::InputObjectType
81
81
  type_defn.arguments.each do |name, arg|
82
82
  @type_reference_map[arg.type.unwrap.to_s] << arg
83
- visit(arg.type, "Input field #{type_defn.name}.#{name}")
83
+ visit(schema, arg.type, "Input field #{type_defn.name}.#{name}")
84
84
  end
85
85
 
86
86
  # Construct arguments class here, which is later used to generate GraphQL::Query::Arguments
87
87
  # to be passed to a resolver proc
88
- GraphQL::Query::Arguments.construct_arguments_class(type_defn)
88
+ if type_defn.arguments_class.nil?
89
+ GraphQL::Query::Arguments.construct_arguments_class(type_defn)
90
+ end
89
91
  end
90
92
  elsif !prev_type.equal?(type_defn)
91
93
  # If the previous entry in the map isn't the same object we just found, raise.
92
94
  raise("Duplicate type definition found for name '#{type_defn.name}'")
93
95
  end
96
+ when Class
97
+ if member.respond_to?(:graphql_definition)
98
+ graphql_member = member.graphql_definition
99
+ visit(schema, graphql_member, context_description)
100
+ else
101
+ raise GraphQL::Schema::InvalidTypeError.new("Unexpected traversal member: #{member} (#{member.class.name})")
102
+ end
94
103
  else
95
104
  message = "Unexpected schema traversal member: #{member} (#{member.class.name})"
96
105
  raise GraphQL::Schema::InvalidTypeError.new(message)
97
106
  end
98
107
  end
99
108
 
100
- def visit_fields(type_defn)
109
+ def visit_fields(schema, type_defn)
101
110
  type_defn.all_fields.each do |field_defn|
102
- visit_field_on_type(type_defn, field_defn)
111
+ visit_field_on_type(schema, type_defn, field_defn)
103
112
  end
104
113
  end
105
114
 
106
- def visit_field_on_type(type_defn, field_defn, dynamic_field: false)
115
+ def visit_field_on_type(schema, type_defn, field_defn, dynamic_field: false)
107
116
  if dynamic_field
108
117
  # Don't apply instrumentation to dynamic fields since they're shared constants
109
118
  instrumented_field_defn = field_defn
@@ -114,11 +123,11 @@ module GraphQL
114
123
  @instrumented_field_map[type_defn.name][instrumented_field_defn.name] = instrumented_field_defn
115
124
  end
116
125
  @type_reference_map[instrumented_field_defn.type.unwrap.name] << instrumented_field_defn
117
- visit(instrumented_field_defn.type, "Field #{type_defn.name}.#{instrumented_field_defn.name}'s return type")
126
+ visit(schema, instrumented_field_defn.type, "Field #{type_defn.name}.#{instrumented_field_defn.name}'s return type")
118
127
 
119
128
  instrumented_field_defn.arguments.each do |name, arg|
120
129
  @type_reference_map[arg.type.unwrap.to_s] << arg
121
- visit(arg.type, "Argument #{name} on #{type_defn.name}.#{instrumented_field_defn.name}")
130
+ visit(schema, arg.type, "Argument #{name} on #{type_defn.name}.#{instrumented_field_defn.name}")
122
131
  end
123
132
 
124
133
  # Construct arguments class here, which is later used to generate GraphQL::Query::Arguments
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+ module GraphQL
3
+ class Schema
4
+ class Union < GraphQL::Schema::Member
5
+ def initialize(obj, ctx)
6
+ @object = obj
7
+ @context = ctx
8
+ end
9
+
10
+ class << self
11
+ def possible_types(*types)
12
+ if types.any?
13
+ @own_possible_types = types
14
+ else
15
+ all_possible_types = own_possible_types
16
+ inherited_possible_types = (superclass < GraphQL::Schema::Union ? superclass.possible_types : [])
17
+ all_possible_types += inherited_possible_types
18
+ all_possible_types.uniq
19
+ end
20
+ end
21
+
22
+ def own_possible_types
23
+ @own_possible_types ||= []
24
+ end
25
+
26
+ # The class resolves type by:
27
+ # - make an instance
28
+ # - call the instance method
29
+ def resolve_type(value, ctx)
30
+ self.new(value, ctx).resolve_type
31
+ end
32
+
33
+ def to_graphql
34
+ type_defn = GraphQL::UnionType.new
35
+ type_defn.name = graphql_name
36
+ type_defn.description = description
37
+ type_defn.possible_types = possible_types
38
+ # If an instance method is defined, use it as a
39
+ # resolve type hook, via the class method
40
+ if method_defined?(:resolve_type)
41
+ type_defn.resolve_type = method(:resolve_type)
42
+ end
43
+ type_defn
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -24,11 +24,7 @@ module GraphQL
24
24
  msg = if resolved_type.nil?
25
25
  nil
26
26
  elsif resolved_type.kind.scalar? && ast_node.selections.any?
27
- if ast_node.selections.first.is_a?(GraphQL::Language::Nodes::InlineFragment)
28
- "Selections can't be made on scalars (%{node_name} returns #{resolved_type.name} but has inline fragments [#{ast_node.selections.map(&:type).map(&:name).join(", ")}])"
29
- else
30
- "Selections can't be made on scalars (%{node_name} returns #{resolved_type.name} but has selections [#{ast_node.selections.map(&:name).join(", ")}])"
31
- end
27
+ "Selections can't be made on scalars (%{node_name} returns #{resolved_type.name} but has selections [#{ast_node.selections.map(&:name).join(", ")}])"
32
28
  elsif resolved_type.kind.object? && ast_node.selections.none?
33
29
  "Objects must have selections (%{node_name} returns #{resolved_type.name} but has no selections)"
34
30
  else
@@ -2,9 +2,6 @@
2
2
  module GraphQL
3
3
  module StaticValidation
4
4
  class FieldsWillMerge
5
- # Special handling for fields without arguments
6
- NO_ARGS = {}.freeze
7
-
8
5
  def validate(context)
9
6
  context.each_irep_node do |node|
10
7
  if node.ast_nodes.size > 1
@@ -19,19 +16,15 @@ module GraphQL
19
16
 
20
17
  # Check for incompatible / non-identical arguments on this node:
21
18
  args = node.ast_nodes.map do |n|
22
- if n.arguments.any?
23
- n.arguments.reduce({}) do |memo, a|
24
- arg_value = a.value
25
- memo[a.name] = case arg_value
26
- when GraphQL::Language::Nodes::AbstractNode
27
- arg_value.to_query_string
28
- else
29
- GraphQL::Language.serialize(arg_value)
30
- end
31
- memo
19
+ n.arguments.reduce({}) do |memo, a|
20
+ arg_value = a.value
21
+ memo[a.name] = case arg_value
22
+ when GraphQL::Language::Nodes::AbstractNode
23
+ arg_value.to_query_string
24
+ else
25
+ GraphQL::Language.serialize(arg_value)
32
26
  end
33
- else
34
- NO_ARGS
27
+ memo
35
28
  end
36
29
  end
37
30
  args.uniq!
@@ -102,17 +102,7 @@ module GraphQL
102
102
  def follow_spreads(node, parent_variables, spreads_for_context, fragment_definitions, visited_fragments)
103
103
  spreads = spreads_for_context[node] - visited_fragments
104
104
  spreads.each do |spread_name|
105
- def_node = nil
106
- variables = nil
107
- # Implement `.find` by hand to avoid Ruby's internal allocations
108
- fragment_definitions.each do |frag_def_node, vars|
109
- if frag_def_node.name == spread_name
110
- def_node = frag_def_node
111
- variables = vars
112
- break
113
- end
114
- end
115
-
105
+ def_node, variables = fragment_definitions.find { |def_node, vars| def_node.name == spread_name }
116
106
  next if !def_node
117
107
  visited_fragments << spread_name
118
108
  variables.each do |name, child_usage|
@@ -39,7 +39,7 @@ module GraphQL
39
39
  # })
40
40
  #
41
41
  # payload = {
42
- # result: result.subscription? ? {data: nil} : result.to_h,
42
+ # result: result.subscription? ? nil : result.to_h,
43
43
  # more: result.subscription?,
44
44
  # }
45
45
  #
@@ -62,21 +62,19 @@ module GraphQL
62
62
  class ActionCableSubscriptions < GraphQL::Subscriptions
63
63
  SUBSCRIPTION_PREFIX = "graphql-subscription:"
64
64
  EVENT_PREFIX = "graphql-event:"
65
-
66
- # @param serializer [<#dump(obj), #load(string)] Used for serializing messages before handing them to `.broadcast(msg)`
67
- def initialize(serializer: Serialize, **rest)
65
+ def initialize(**rest)
68
66
  # A per-process map of subscriptions to deliver.
69
67
  # This is provided by Rails, so let's use it
70
68
  @subscriptions = Concurrent::Map.new
71
- @serializer = serializer
72
69
  super
73
70
  end
74
71
 
75
72
  # An event was triggered; Push the data over ActionCable.
76
73
  # Subscribers will re-evaluate locally.
74
+ # TODO: this method name is a smell
77
75
  def execute_all(event, object)
78
76
  stream = EVENT_PREFIX + event.topic
79
- message = @serializer.dump(object)
77
+ message = Serialize.dump(object)
80
78
  ActionCable.server.broadcast(stream, message)
81
79
  end
82
80
 
@@ -99,7 +97,7 @@ module GraphQL
99
97
  @subscriptions[subscription_id] = query
100
98
  events.each do |event|
101
99
  channel.stream_from(EVENT_PREFIX + event.topic, coder: ActiveSupport::JSON) do |message|
102
- execute(subscription_id, event, @serializer.load(message))
100
+ execute(subscription_id, event, Serialize.load(message))
103
101
  nil
104
102
  end
105
103
  end
@@ -2,7 +2,6 @@
2
2
  require "graphql/tracing/active_support_notifications_tracing"
3
3
  require "graphql/tracing/platform_tracing"
4
4
  require "graphql/tracing/appsignal_tracing"
5
- require "graphql/tracing/data_dog_tracing"
6
5
  require "graphql/tracing/new_relic_tracing"
7
6
  require "graphql/tracing/scout_tracing"
8
7
  require "graphql/tracing/skylight_tracing"
@@ -12,10 +12,8 @@ module GraphQL
12
12
  attr_accessor :platform_keys
13
13
  end
14
14
 
15
- def initialize(options = {})
16
- @options = options
15
+ def initialize
17
16
  @platform_keys = self.class.platform_keys
18
- @trace_scalars = options.fetch(:trace_scalars, false)
19
17
  end
20
18
 
21
19
  def trace(key, data)
@@ -43,30 +41,19 @@ module GraphQL
43
41
  return_type = field.type.unwrap
44
42
  case return_type
45
43
  when GraphQL::ScalarType, GraphQL::EnumType
46
- if field.trace || (field.trace.nil? && @trace_scalars)
47
- trace_field(type, field)
48
- else
49
- field
50
- end
44
+ field
51
45
  else
52
- trace_field(type, field)
46
+ new_f = field.redefine
47
+ new_f.metadata[:platform_key] = platform_field_key(type, field)
48
+ new_f
53
49
  end
54
50
  end
55
51
 
56
- def trace_field(type, field)
57
- new_f = field.redefine
58
- new_f.metadata[:platform_key] = platform_field_key(type, field)
59
- new_f
60
- end
61
-
62
- def self.use(schema_defn, options = {})
63
- tracer = self.new(options)
52
+ def self.use(schema_defn)
53
+ tracer = self.new
64
54
  schema_defn.instrument(:field, tracer)
65
55
  schema_defn.tracer(tracer)
66
56
  end
67
-
68
- private
69
- attr_reader :options
70
57
  end
71
58
  end
72
59
  end
@@ -16,9 +16,9 @@ module GraphQL
16
16
  "execute_query_lazy" => "execute.graphql",
17
17
  }
18
18
 
19
- def initialize(options = {})
19
+ def initialize
20
20
  self.class.include ScoutApm::Tracer
21
- super(options)
21
+ super
22
22
  end
23
23
 
24
24
  def platform_trace(platform_key, key, data)
@@ -26,9 +26,8 @@ module GraphQL
26
26
  @possible_types = possible_types
27
27
  message = "The value from \"#{field.name}\" on \"#{parent_type}\" could not be resolved to \"#{field.type}\". " \
28
28
  "(Received: `#{resolved_type.inspect}`, Expected: [#{possible_types.map(&:inspect).join(", ")}]) " \
29
- "Make sure you have defined a `resolve_type` proc on your schema and that value `#{value.inspect}` " \
30
- "gets resolved to a valid type. You may need to add your type to `orphan_types` if it implements an " \
31
- "interface but isn't a return type of any other field."
29
+ "Make sure you have defined a `type_from_object` proc on your schema and that value `#{value.inspect}` " \
30
+ "gets resolved to a valid type."
32
31
  super(message)
33
32
  end
34
33
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module GraphQL
3
- VERSION = "1.7.14"
3
+ VERSION = "1.8.0.pre1"
4
4
  end
data/readme.md CHANGED
@@ -9,7 +9,7 @@
9
9
  A Ruby implementation of [GraphQL](http://graphql.org/).
10
10
 
11
11
  - [Website](https://rmosolgo.github.io/graphql-ruby)
12
- - [API Documentation](http://www.rubydoc.info/gems/graphql)
12
+ - [API Documentation](http://www.rubydoc.info/github/rmosolgo/graphql-ruby)
13
13
  - [Newsletter](https://tinyletter.com/graphql-ruby)
14
14
 
15
15
  ## Installation
@@ -17,31 +17,10 @@ class GraphqlChannel < ActionCable::Channel::Base
17
17
  field :value, types.Int
18
18
  end
19
19
 
20
- # Wacky behavior around the number 4
21
- # so we can confirm it's used by the UI
22
- module CustomSerializer
23
- def self.load(value)
24
- if value == "4x"
25
- ExamplePayload.new(400)
26
- else
27
- GraphQL::Subscriptions::Serialize.load(value)
28
- end
29
- end
30
-
31
- def self.dump(obj)
32
- if obj.is_a?(ExamplePayload) && obj.value == 4
33
- "4x"
34
- else
35
- GraphQL::Subscriptions::Serialize.dump(obj)
36
- end
37
- end
38
- end
39
-
40
20
  GraphQLSchema = GraphQL::Schema.define do
41
21
  query(QueryType)
42
22
  subscription(SubscriptionType)
43
- use GraphQL::Subscriptions::ActionCableSubscriptions,
44
- serializer: CustomSerializer
23
+ use GraphQL::Subscriptions::ActionCableSubscriptions
45
24
  end
46
25
 
47
26
  def subscribed
@@ -358,242 +358,3 @@ GraphqlChannel#make_trigger({"id"=>"updates-2", "value"=>5})
358
358
  [ActionCable] Broadcasting to graphql-event::payload:id:updates-2: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzU\"}"
359
359
  [ActionCable] Broadcasting to graphql-subscription:c2334c1a-d146-4b1c-90d9-9cb1c7b4046d: {:result=>{"data"=>{"payload"=>{"value"=>5}}}, :more=>true}
360
360
  GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>5}}}, "more"=>true} (via streamed from graphql-subscription:c2334c1a-d146-4b1c-90d9-9cb1c7b4046d)
361
- Started GET "/" for 127.0.0.1 at 2017-11-16 21:27:24 -0500
362
- Processing by PagesController#show as HTML
363
- Rendering pages/show.html within layouts/application
364
- Rendered pages/show.html within layouts/application (0.8ms)
365
- Completed 200 OK in 173ms (Views: 171.5ms)
366
-
367
-
368
- Started GET "/assets/application-aca150c4b2db51d5326af18134f6281fbce7e823a372b0337cca65ff41b4a7ea.js" for 127.0.0.1 at 2017-11-16 21:27:24 -0500
369
- Started GET "/cable" for 127.0.0.1 at 2017-11-16 21:27:24 -0500
370
- Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2017-11-16 21:27:24 -0500
371
- Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
372
- GraphqlChannel is transmitting the subscription confirmation
373
- GraphqlChannel is transmitting the subscription confirmation
374
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-2"}})
375
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
376
- GraphqlChannel is streaming from graphql-subscription:34ad7c3f-9311-4982-b873-312032bbcd76
377
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-1"}})
378
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
379
- GraphqlChannel is streaming from graphql-event::payload:id:updates-2
380
- GraphqlChannel is streaming from graphql-subscription:73055d69-7575-4caa-88b7-74e1a1070c0d
381
- GraphqlChannel is streaming from graphql-event::payload:id:updates-1
382
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>1})
383
- Could not execute command from ({"command"=>"message", "identifier"=>"{\"channel\":\"GraphqlChannel\",\"id\":\"15fc7cd712b\"}", "data"=>"{\"id\":\"updates-1\",\"value\":1,\"action\":\"make_trigger\"}"}) [NoMethodError - undefined method `dump_value' for GraphqlChannel::CustomSerializer:Module]: /Users/rmosolgo/code/graphql-ruby/lib/graphql/subscriptions/serialize.rb:21:in `dump' | /Users/rmosolgo/code/graphql-ruby/spec/dummy/app/channels/graphql_channel.rb:36:in `dump' | /Users/rmosolgo/code/graphql-ruby/lib/graphql/subscriptions/action_cable_subscriptions.rb:78:in `execute_all' | /Users/rmosolgo/code/graphql-ruby/lib/graphql/subscriptions.rb:52:in `trigger' | /Users/rmosolgo/code/graphql-ruby/spec/dummy/app/channels/graphql_channel.rb:83:in `make_trigger'
384
- Started GET "/" for 127.0.0.1 at 2017-11-16 21:28:22 -0500
385
- Processing by PagesController#show as HTML
386
- Rendering pages/show.html within layouts/application
387
- Rendered pages/show.html within layouts/application (0.6ms)
388
- Completed 200 OK in 166ms (Views: 164.8ms)
389
-
390
-
391
- Started GET "/cable" for 127.0.0.1 at 2017-11-16 21:28:23 -0500
392
- Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2017-11-16 21:28:23 -0500
393
- Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
394
- GraphqlChannel is transmitting the subscription confirmation
395
- GraphqlChannel is transmitting the subscription confirmation
396
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-2"}})
397
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
398
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-1"}})
399
- GraphqlChannel is streaming from graphql-subscription:dee02509-90a6-4ac1-8c1d-c765cb445ddd
400
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
401
- GraphqlChannel is streaming from graphql-event::payload:id:updates-2
402
- GraphqlChannel is streaming from graphql-subscription:0f50c340-d3cd-4ab7-8e6a-055d23083185
403
- GraphqlChannel is streaming from graphql-event::payload:id:updates-1
404
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>1})
405
- Could not execute command from ({"command"=>"message", "identifier"=>"{\"channel\":\"GraphqlChannel\",\"id\":\"15fc7cf7d8b\"}", "data"=>"{\"id\":\"updates-1\",\"value\":1,\"action\":\"make_trigger\"}"}) [NameError - undefined local variable or method `value' for GraphqlChannel::CustomSerializer:Module]: /Users/rmosolgo/code/graphql-ruby/spec/dummy/app/channels/graphql_channel.rb:35:in `dump' | /Users/rmosolgo/code/graphql-ruby/lib/graphql/subscriptions/action_cable_subscriptions.rb:78:in `execute_all' | /Users/rmosolgo/code/graphql-ruby/lib/graphql/subscriptions.rb:52:in `trigger' | /Users/rmosolgo/code/graphql-ruby/spec/dummy/app/channels/graphql_channel.rb:82:in `make_trigger' | /Users/rmosolgo/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actioncable-5.1.4/lib/action_cable/channel/base.rb:262:in `public_send'
406
- Started GET "/" for 127.0.0.1 at 2017-11-16 21:28:40 -0500
407
- Processing by PagesController#show as HTML
408
- Rendering pages/show.html within layouts/application
409
- Rendered pages/show.html within layouts/application (0.6ms)
410
- Completed 200 OK in 11ms (Views: 8.8ms)
411
-
412
-
413
- Started GET "/cable" for 127.0.0.1 at 2017-11-16 21:28:40 -0500
414
- Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2017-11-16 21:28:40 -0500
415
- Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
416
- GraphqlChannel is transmitting the subscription confirmation
417
- GraphqlChannel is transmitting the subscription confirmation
418
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-2"}})
419
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
420
- GraphqlChannel is streaming from graphql-subscription:528198ff-21c1-4051-a319-1feb9060f335
421
- GraphqlChannel is streaming from graphql-event::payload:id:updates-2
422
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-1"}})
423
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
424
- GraphqlChannel is streaming from graphql-event::payload:id:updates-1
425
- GraphqlChannel is streaming from graphql-subscription:dba8445d-3284-4734-90f6-fdf8f0707a50
426
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>1})
427
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzE\"}"
428
- [ActionCable] Broadcasting to graphql-subscription:dba8445d-3284-4734-90f6-fdf8f0707a50: {:result=>{"data"=>{"payload"=>{"value"=>1}}}, :more=>true}
429
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>1}}}, "more"=>true} (via streamed from graphql-subscription:dba8445d-3284-4734-90f6-fdf8f0707a50)
430
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>2})
431
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzI\"}"
432
- [ActionCable] Broadcasting to graphql-subscription:dba8445d-3284-4734-90f6-fdf8f0707a50: {:result=>{"data"=>{"payload"=>{"value"=>2}}}, :more=>true}
433
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>2}}}, "more"=>true} (via streamed from graphql-subscription:dba8445d-3284-4734-90f6-fdf8f0707a50)
434
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>3})
435
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzM\"}"
436
- [ActionCable] Broadcasting to graphql-subscription:dba8445d-3284-4734-90f6-fdf8f0707a50: {:result=>{"data"=>{"payload"=>{"value"=>3}}}, :more=>true}
437
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>3}}}, "more"=>true} (via streamed from graphql-subscription:dba8445d-3284-4734-90f6-fdf8f0707a50)
438
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>4})
439
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "4x"
440
- [ActionCable] Broadcasting to graphql-subscription:dba8445d-3284-4734-90f6-fdf8f0707a50: {:result=>{"data"=>{"payload"=>{"value"=>4}}}, :more=>true}
441
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>4}}}, "more"=>true} (via streamed from graphql-subscription:dba8445d-3284-4734-90f6-fdf8f0707a50)
442
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>5})
443
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzU\"}"
444
- [ActionCable] Broadcasting to graphql-subscription:dba8445d-3284-4734-90f6-fdf8f0707a50: {:result=>{"data"=>{"payload"=>{"value"=>5}}}, :more=>true}
445
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>5}}}, "more"=>true} (via streamed from graphql-subscription:dba8445d-3284-4734-90f6-fdf8f0707a50)
446
- Started GET "/" for 127.0.0.1 at 2017-11-16 21:29:15 -0500
447
- Processing by PagesController#show as HTML
448
- Rendering pages/show.html within layouts/application
449
- Rendered pages/show.html within layouts/application (0.8ms)
450
- Completed 200 OK in 178ms (Views: 176.8ms)
451
-
452
-
453
- Started GET "/cable" for 127.0.0.1 at 2017-11-16 21:29:15 -0500
454
- Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2017-11-16 21:29:15 -0500
455
- Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
456
- GraphqlChannel is transmitting the subscription confirmation
457
- GraphqlChannel is transmitting the subscription confirmation
458
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-1"}})
459
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
460
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-2"}})
461
- GraphqlChannel is streaming from graphql-event::payload:id:updates-1
462
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
463
- GraphqlChannel is streaming from graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847
464
- GraphqlChannel is streaming from graphql-event::payload:id:updates-2
465
- GraphqlChannel is streaming from graphql-subscription:8642d019-1a8c-4eb9-ada2-7a5b1ccffeee
466
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>1})
467
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzE\"}"
468
- [ActionCable] Broadcasting to graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847: {:result=>{"data"=>{"payload"=>{"value"=>1}}}, :more=>true}
469
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>1}}}, "more"=>true} (via streamed from graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847)
470
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>2})
471
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzI\"}"
472
- [ActionCable] Broadcasting to graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847: {:result=>{"data"=>{"payload"=>{"value"=>2}}}, :more=>true}
473
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>2}}}, "more"=>true} (via streamed from graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847)
474
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>3})
475
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzM\"}"
476
- [ActionCable] Broadcasting to graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847: {:result=>{"data"=>{"payload"=>{"value"=>3}}}, :more=>true}
477
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>3}}}, "more"=>true} (via streamed from graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847)
478
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>4})
479
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "4x"
480
- [ActionCable] Broadcasting to graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847: {:result=>{"data"=>{"payload"=>{"value"=>4}}}, :more=>true}
481
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>4}}}, "more"=>true} (via streamed from graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847)
482
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>5})
483
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzU\"}"
484
- [ActionCable] Broadcasting to graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847: {:result=>{"data"=>{"payload"=>{"value"=>5}}}, :more=>true}
485
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>5}}}, "more"=>true} (via streamed from graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847)
486
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>6})
487
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzY\"}"
488
- [ActionCable] Broadcasting to graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847: {:result=>{"data"=>{"payload"=>{"value"=>6}}}, :more=>true}
489
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>6}}}, "more"=>true} (via streamed from graphql-subscription:ac17fc47-fdf3-4951-813b-f4d04fdc7847)
490
- GraphqlChannel#make_trigger({"id"=>"updates-2", "value"=>1})
491
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-2: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzE\"}"
492
- [ActionCable] Broadcasting to graphql-subscription:8642d019-1a8c-4eb9-ada2-7a5b1ccffeee: {:result=>{"data"=>{"payload"=>{"value"=>1}}}, :more=>true}
493
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>1}}}, "more"=>true} (via streamed from graphql-subscription:8642d019-1a8c-4eb9-ada2-7a5b1ccffeee)
494
- GraphqlChannel#make_trigger({"id"=>"updates-2", "value"=>2})
495
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-2: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzI\"}"
496
- [ActionCable] Broadcasting to graphql-subscription:8642d019-1a8c-4eb9-ada2-7a5b1ccffeee: {:result=>{"data"=>{"payload"=>{"value"=>2}}}, :more=>true}
497
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>2}}}, "more"=>true} (via streamed from graphql-subscription:8642d019-1a8c-4eb9-ada2-7a5b1ccffeee)
498
- GraphqlChannel#make_trigger({"id"=>"updates-2", "value"=>3})
499
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-2: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzM\"}"
500
- [ActionCable] Broadcasting to graphql-subscription:8642d019-1a8c-4eb9-ada2-7a5b1ccffeee: {:result=>{"data"=>{"payload"=>{"value"=>3}}}, :more=>true}
501
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>3}}}, "more"=>true} (via streamed from graphql-subscription:8642d019-1a8c-4eb9-ada2-7a5b1ccffeee)
502
- GraphqlChannel#make_trigger({"id"=>"updates-2", "value"=>4})
503
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-2: "4x"
504
- [ActionCable] Broadcasting to graphql-subscription:8642d019-1a8c-4eb9-ada2-7a5b1ccffeee: {:result=>{"data"=>{"payload"=>{"value"=>4}}}, :more=>true}
505
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>4}}}, "more"=>true} (via streamed from graphql-subscription:8642d019-1a8c-4eb9-ada2-7a5b1ccffeee)
506
- Started GET "/" for 127.0.0.1 at 2017-11-16 21:30:10 -0500
507
- Processing by PagesController#show as HTML
508
- Rendering pages/show.html within layouts/application
509
- Rendered pages/show.html within layouts/application (0.7ms)
510
- Completed 200 OK in 12ms (Views: 10.1ms)
511
-
512
-
513
- Started GET "/cable" for 127.0.0.1 at 2017-11-16 21:30:10 -0500
514
- Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2017-11-16 21:30:10 -0500
515
- Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
516
- GraphqlChannel is transmitting the subscription confirmation
517
- GraphqlChannel is transmitting the subscription confirmation
518
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-2"}})
519
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
520
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-1"}})
521
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
522
- GraphqlChannel is streaming from graphql-subscription:e33017bd-68e0-4443-81b9-cb2b750d345e
523
- GraphqlChannel is streaming from graphql-event::payload:id:updates-2
524
- GraphqlChannel is streaming from graphql-subscription:ff9f5a68-c71c-4b5c-8135-cb902840a584
525
- GraphqlChannel is streaming from graphql-event::payload:id:updates-1
526
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>1})
527
- dumping: #<GraphqlChannel::ExamplePayload:0x007fc09dee35f8>
528
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzE\"}"
529
- Loading: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzE\"}"
530
- [ActionCable] Broadcasting to graphql-subscription:ff9f5a68-c71c-4b5c-8135-cb902840a584: {:result=>{"data"=>{"payload"=>{"value"=>1}}}, :more=>true}
531
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>1}}}, "more"=>true} (via streamed from graphql-subscription:ff9f5a68-c71c-4b5c-8135-cb902840a584)
532
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>2})
533
- dumping: #<GraphqlChannel::ExamplePayload:0x007fc09deb3330>
534
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzI\"}"
535
- Loading: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzI\"}"
536
- [ActionCable] Broadcasting to graphql-subscription:ff9f5a68-c71c-4b5c-8135-cb902840a584: {:result=>{"data"=>{"payload"=>{"value"=>2}}}, :more=>true}
537
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>2}}}, "more"=>true} (via streamed from graphql-subscription:ff9f5a68-c71c-4b5c-8135-cb902840a584)
538
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>3})
539
- dumping: #<GraphqlChannel::ExamplePayload:0x007fc09de7b020>
540
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzM\"}"
541
- Loading: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzM\"}"
542
- [ActionCable] Broadcasting to graphql-subscription:ff9f5a68-c71c-4b5c-8135-cb902840a584: {:result=>{"data"=>{"payload"=>{"value"=>3}}}, :more=>true}
543
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>3}}}, "more"=>true} (via streamed from graphql-subscription:ff9f5a68-c71c-4b5c-8135-cb902840a584)
544
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>4})
545
- dumping: #<GraphqlChannel::ExamplePayload:0x007fc09de41f78>
546
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "4x"
547
- Loading: "4x"
548
- [ActionCable] Broadcasting to graphql-subscription:ff9f5a68-c71c-4b5c-8135-cb902840a584: {:result=>{"data"=>{"payload"=>{"value"=>4}}}, :more=>true}
549
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>4}}}, "more"=>true} (via streamed from graphql-subscription:ff9f5a68-c71c-4b5c-8135-cb902840a584)
550
- Started GET "/" for 127.0.0.1 at 2017-11-16 21:30:26 -0500
551
- Processing by PagesController#show as HTML
552
- Rendering pages/show.html within layouts/application
553
- Rendered pages/show.html within layouts/application (0.3ms)
554
- Completed 200 OK in 7ms (Views: 5.4ms)
555
-
556
-
557
- Started GET "/cable" for 127.0.0.1 at 2017-11-16 21:30:27 -0500
558
- Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2017-11-16 21:30:27 -0500
559
- Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
560
- GraphqlChannel is transmitting the subscription confirmation
561
- GraphqlChannel is transmitting the subscription confirmation
562
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-2"}})
563
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
564
- GraphqlChannel#execute({"query"=>"subscription($id: ID!) { payload(id: $id) { value } }", "variables"=>{"id"=>"updates-1"}})
565
- GraphqlChannel is streaming from graphql-event::payload:id:updates-2
566
- GraphqlChannel transmitting {:result=>{"data"=>nil}, :more=>true}
567
- GraphqlChannel is streaming from graphql-subscription:ba2e384c-cbcf-4f9f-aa5e-8f666effd2a8
568
- GraphqlChannel is streaming from graphql-subscription:18c8f852-04c7-4bb8-b6f7-ecc64a2a8ac9
569
- GraphqlChannel is streaming from graphql-event::payload:id:updates-1
570
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>1})
571
- dumping: #<GraphqlChannel::ExamplePayload:0x007fc09e9fc660>
572
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzE\"}"
573
- Loading: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzE\"}"
574
- [ActionCable] Broadcasting to graphql-subscription:18c8f852-04c7-4bb8-b6f7-ecc64a2a8ac9: {:result=>{"data"=>{"payload"=>{"value"=>1}}}, :more=>true}
575
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>1}}}, "more"=>true} (via streamed from graphql-subscription:18c8f852-04c7-4bb8-b6f7-ecc64a2a8ac9)
576
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>2})
577
- dumping: #<GraphqlChannel::ExamplePayload:0x007fc09dced938>
578
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzI\"}"
579
- Loading: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzI\"}"
580
- [ActionCable] Broadcasting to graphql-subscription:18c8f852-04c7-4bb8-b6f7-ecc64a2a8ac9: {:result=>{"data"=>{"payload"=>{"value"=>2}}}, :more=>true}
581
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>2}}}, "more"=>true} (via streamed from graphql-subscription:18c8f852-04c7-4bb8-b6f7-ecc64a2a8ac9)
582
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>3})
583
- dumping: #<GraphqlChannel::ExamplePayload:0x007fc09e8c41d0>
584
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzM\"}"
585
- Loading: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzM\"}"
586
- [ActionCable] Broadcasting to graphql-subscription:18c8f852-04c7-4bb8-b6f7-ecc64a2a8ac9: {:result=>{"data"=>{"payload"=>{"value"=>3}}}, :more=>true}
587
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>3}}}, "more"=>true} (via streamed from graphql-subscription:18c8f852-04c7-4bb8-b6f7-ecc64a2a8ac9)
588
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>4})
589
- dumping: #<GraphqlChannel::ExamplePayload:0x007fc09d407ad0>
590
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "4x"
591
- Loading: "4x"
592
- [ActionCable] Broadcasting to graphql-subscription:18c8f852-04c7-4bb8-b6f7-ecc64a2a8ac9: {:result=>{"data"=>{"payload"=>{"value"=>400}}}, :more=>true}
593
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>400}}}, "more"=>true} (via streamed from graphql-subscription:18c8f852-04c7-4bb8-b6f7-ecc64a2a8ac9)
594
- GraphqlChannel#make_trigger({"id"=>"updates-1", "value"=>5})
595
- dumping: #<GraphqlChannel::ExamplePayload:0x007fc09dbbf250>
596
- [ActionCable] Broadcasting to graphql-event::payload:id:updates-1: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzU\"}"
597
- Loading: "{\"__gid__\":\"Z2lkOi8vZHVtbXkvR3JhcGhxbENoYW5uZWw6OkV4YW1wbGVQYXlsb2FkLzU\"}"
598
- [ActionCable] Broadcasting to graphql-subscription:18c8f852-04c7-4bb8-b6f7-ecc64a2a8ac9: {:result=>{"data"=>{"payload"=>{"value"=>5}}}, :more=>true}
599
- GraphqlChannel transmitting {"result"=>{"data"=>{"payload"=>{"value"=>5}}}, "more"=>true} (via streamed from graphql-subscription:18c8f852-04c7-4bb8-b6f7-ecc64a2a8ac9)