graphql 1.7.14 → 1.8.0.pre1

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 (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)