graphql 1.10.0.pre3 → 1.10.0.pre4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/generators/graphql/templates/schema.erb +7 -0
- data/lib/graphql/argument.rb +3 -35
- data/lib/graphql/define/assign_enum_value.rb +1 -1
- data/lib/graphql/define/assign_object_field.rb +3 -3
- data/lib/graphql/define/defined_object_proxy.rb +8 -2
- data/lib/graphql/define/instance_definable.rb +10 -106
- data/lib/graphql/directive.rb +4 -0
- data/lib/graphql/enum_type.rb +1 -71
- data/lib/graphql/execution/execute.rb +1 -1
- data/lib/graphql/execution/interpreter/runtime.rb +48 -8
- data/lib/graphql/execution/multiplex.rb +3 -3
- data/lib/graphql/field.rb +1 -117
- data/lib/graphql/function.rb +1 -30
- data/lib/graphql/input_object_type.rb +1 -23
- data/lib/graphql/interface_type.rb +1 -22
- data/lib/graphql/language/document_from_schema_definition.rb +9 -3
- data/lib/graphql/language/nodes.rb +2 -2
- data/lib/graphql/object_type.rb +1 -21
- data/lib/graphql/query.rb +0 -1
- data/lib/graphql/query/context.rb +2 -5
- data/lib/graphql/relay/connection_type.rb +2 -1
- data/lib/graphql/relay/edge_type.rb +1 -0
- data/lib/graphql/relay/mutation.rb +1 -86
- data/lib/graphql/relay/node.rb +2 -2
- data/lib/graphql/scalar_type.rb +1 -58
- data/lib/graphql/schema.rb +60 -9
- data/lib/graphql/schema/build_from_definition.rb +6 -1
- data/lib/graphql/schema/directive.rb +7 -1
- data/lib/graphql/schema/enum_value.rb +1 -0
- data/lib/graphql/schema/introspection_system.rb +4 -1
- data/lib/graphql/schema/list.rb +17 -2
- data/lib/graphql/schema/loader.rb +9 -3
- data/lib/graphql/schema/mutation.rb +1 -1
- data/lib/graphql/schema/object.rb +0 -4
- data/lib/graphql/schema/relay_classic_mutation.rb +1 -1
- data/lib/graphql/schema/resolver.rb +1 -1
- data/lib/graphql/schema/subscription.rb +5 -5
- data/lib/graphql/schema/type_membership.rb +1 -1
- data/lib/graphql/schema/union.rb +1 -1
- data/lib/graphql/subscriptions.rb +2 -2
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +1 -1
- data/lib/graphql/tracing.rb +7 -3
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +4 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +8 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +8 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +8 -0
- data/lib/graphql/tracing/platform_tracing.rb +25 -4
- data/lib/graphql/tracing/prometheus_tracing.rb +8 -0
- data/lib/graphql/tracing/scout_tracing.rb +8 -0
- data/lib/graphql/tracing/skylight_tracing.rb +8 -0
- data/lib/graphql/union_type.rb +12 -27
- data/lib/graphql/version.rb +1 -1
- metadata +8 -8
data/lib/graphql/relay/node.rb
CHANGED
@@ -11,7 +11,7 @@ module GraphQL
|
|
11
11
|
field = GraphQL::Types::Relay::NodeField.graphql_definition
|
12
12
|
|
13
13
|
if kwargs.any? || block
|
14
|
-
field = field.redefine(kwargs, &block)
|
14
|
+
field = field.redefine(**kwargs, &block)
|
15
15
|
end
|
16
16
|
|
17
17
|
field
|
@@ -21,7 +21,7 @@ module GraphQL
|
|
21
21
|
field = GraphQL::Types::Relay::NodesField.graphql_definition
|
22
22
|
|
23
23
|
if kwargs.any? || block
|
24
|
-
field = field.redefine(kwargs, &block)
|
24
|
+
field = field.redefine(**kwargs, &block)
|
25
25
|
end
|
26
26
|
|
27
27
|
field
|
data/lib/graphql/scalar_type.rb
CHANGED
@@ -1,63 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module GraphQL
|
3
|
-
#
|
4
|
-
#
|
5
|
-
# Scalars are plain values. They are leaf nodes in a GraphQL query tree.
|
6
|
-
#
|
7
|
-
# ## Built-in Scalars
|
8
|
-
#
|
9
|
-
# `GraphQL` comes with standard built-in scalars:
|
10
|
-
#
|
11
|
-
# |Constant | `.define` helper|
|
12
|
-
# |-------|--------|
|
13
|
-
# |`GraphQL::STRING_TYPE` | `types.String`|
|
14
|
-
# |`GraphQL::INT_TYPE` | `types.Int`|
|
15
|
-
# |`GraphQL::FLOAT_TYPE` | `types.Float`|
|
16
|
-
# |`GraphQL::ID_TYPE` | `types.ID`|
|
17
|
-
# |`GraphQL::BOOLEAN_TYPE` | `types.Boolean`|
|
18
|
-
#
|
19
|
-
# (`types` is an instance of `GraphQL::Definition::TypeDefiner`; `.String`, `.Float`, etc are methods which return built-in scalars.)
|
20
|
-
#
|
21
|
-
# ## Custom Scalars
|
22
|
-
#
|
23
|
-
# You can define custom scalars for your GraphQL server. It requires some special functions:
|
24
|
-
#
|
25
|
-
# - `coerce_input` is used to prepare incoming values for GraphQL execution. (Incoming values come from variables or literal values in the query string.)
|
26
|
-
# - `coerce_result` is used to turn Ruby values _back_ into serializable values for query responses.
|
27
|
-
#
|
28
|
-
# @example defining a type for Time
|
29
|
-
# TimeType = GraphQL::ScalarType.define do
|
30
|
-
# name "Time"
|
31
|
-
# description "Time since epoch in seconds"
|
32
|
-
#
|
33
|
-
# coerce_input ->(value, ctx) { Time.at(Float(value)) }
|
34
|
-
# coerce_result ->(value, ctx) { value.to_f }
|
35
|
-
# end
|
36
|
-
#
|
37
|
-
#
|
38
|
-
# You can customize the error message for invalid input values by raising a `GraphQL::CoercionError` within `coerce_input`:
|
39
|
-
#
|
40
|
-
# @example raising a custom error message
|
41
|
-
# TimeType = GraphQL::ScalarType.define do
|
42
|
-
# name "Time"
|
43
|
-
# description "Time since epoch in seconds"
|
44
|
-
#
|
45
|
-
# coerce_input ->(value, ctx) do
|
46
|
-
# begin
|
47
|
-
# Time.at(Float(value))
|
48
|
-
# rescue ArgumentError
|
49
|
-
# raise GraphQL::CoercionError, "cannot coerce `#{value.inspect}` to Float"
|
50
|
-
# end
|
51
|
-
# end
|
52
|
-
#
|
53
|
-
# coerce_result ->(value, ctx) { value.to_f }
|
54
|
-
# end
|
55
|
-
#
|
56
|
-
# This will result in the message of the `GraphQL::CoercionError` being used in the error response:
|
57
|
-
#
|
58
|
-
# @example custom error response
|
59
|
-
# {"message"=>"cannot coerce `"2"` to Float", "locations"=>[{"line"=>3, "column"=>9}], "fields"=>["arg"]}
|
60
|
-
#
|
3
|
+
# @api deprecated
|
61
4
|
class ScalarType < GraphQL::BaseType
|
62
5
|
accepts_definitions :coerce, :coerce_input, :coerce_result
|
63
6
|
ensure_defined :coerce_non_null_input, :coerce_result
|
data/lib/graphql/schema.rb
CHANGED
@@ -104,6 +104,8 @@ module GraphQL
|
|
104
104
|
mutation: ->(schema, t) { schema.mutation = t.respond_to?(:graphql_definition) ? t.graphql_definition : t },
|
105
105
|
subscription: ->(schema, t) { schema.subscription = t.respond_to?(:graphql_definition) ? t.graphql_definition : t },
|
106
106
|
disable_introspection_entry_points: ->(schema) { schema.disable_introspection_entry_points = true },
|
107
|
+
disable_schema_introspection_entry_point: ->(schema) { schema.disable_schema_introspection_entry_point = true },
|
108
|
+
disable_type_introspection_entry_point: ->(schema) { schema.disable_type_introspection_entry_point = true },
|
107
109
|
directives: ->(schema, directives) { schema.directives = directives.reduce({}) { |m, d| m[d.graphql_name] = d; m } },
|
108
110
|
directive: ->(schema, directive) { schema.directives[directive.graphql_name] = directive },
|
109
111
|
instrument: ->(schema, type, instrumenter, after_built_ins: false) {
|
@@ -163,6 +165,20 @@ module GraphQL
|
|
163
165
|
!!@disable_introspection_entry_points
|
164
166
|
end
|
165
167
|
|
168
|
+
# [Boolean] True if this object disables the __schema introspection entry point field
|
169
|
+
attr_accessor :disable_schema_introspection_entry_point
|
170
|
+
|
171
|
+
def disable_schema_introspection_entry_point?
|
172
|
+
!!@disable_schema_introspection_entry_point
|
173
|
+
end
|
174
|
+
|
175
|
+
# [Boolean] True if this object disables the __type introspection entry point field
|
176
|
+
attr_accessor :disable_type_introspection_entry_point
|
177
|
+
|
178
|
+
def disable_type_introspection_entry_point?
|
179
|
+
!!@disable_type_introspection_entry_point
|
180
|
+
end
|
181
|
+
|
166
182
|
class << self
|
167
183
|
attr_writer :default_execution_strategy
|
168
184
|
end
|
@@ -213,6 +229,8 @@ module GraphQL
|
|
213
229
|
@interpreter = false
|
214
230
|
@error_bubbling = false
|
215
231
|
@disable_introspection_entry_points = false
|
232
|
+
@disable_schema_introspection_entry_point = false
|
233
|
+
@disable_type_introspection_entry_point = false
|
216
234
|
end
|
217
235
|
|
218
236
|
# @return [Boolean] True if using the new {GraphQL::Execution::Interpreter}
|
@@ -282,7 +300,7 @@ module GraphQL
|
|
282
300
|
query = GraphQL::Query.new(self, document: doc, context: context)
|
283
301
|
validator_opts = { schema: self }
|
284
302
|
rules && (validator_opts[:rules] = rules)
|
285
|
-
validator = GraphQL::StaticValidation::Validator.new(validator_opts)
|
303
|
+
validator = GraphQL::StaticValidation::Validator.new(**validator_opts)
|
286
304
|
res = validator.validate(query)
|
287
305
|
res[:errors]
|
288
306
|
end
|
@@ -730,9 +748,12 @@ module GraphQL
|
|
730
748
|
end
|
731
749
|
|
732
750
|
# Return the GraphQL::Language::Document IDL AST for the schema
|
751
|
+
# @param context [Hash]
|
752
|
+
# @param only [<#call(member, ctx)>]
|
753
|
+
# @param except [<#call(member, ctx)>]
|
733
754
|
# @return [GraphQL::Language::Document]
|
734
|
-
def to_document
|
735
|
-
GraphQL::Language::DocumentFromSchemaDefinition.new(self).document
|
755
|
+
def to_document(only: nil, except: nil, context: {})
|
756
|
+
GraphQL::Language::DocumentFromSchemaDefinition.new(self, only: only, except: except, context: context).document
|
736
757
|
end
|
737
758
|
|
738
759
|
# Return the Hash response of {Introspection::INTROSPECTION_QUERY}.
|
@@ -835,13 +856,13 @@ module GraphQL
|
|
835
856
|
GraphQL::StaticValidation::Validator.new(schema: self)
|
836
857
|
end
|
837
858
|
|
838
|
-
def use(plugin,
|
839
|
-
if
|
840
|
-
plugin.use(self,
|
859
|
+
def use(plugin, **kwargs)
|
860
|
+
if kwargs.any?
|
861
|
+
plugin.use(self, **kwargs)
|
841
862
|
else
|
842
863
|
plugin.use(self)
|
843
864
|
end
|
844
|
-
own_plugins << [plugin,
|
865
|
+
own_plugins << [plugin, kwargs]
|
845
866
|
end
|
846
867
|
|
847
868
|
def plugins
|
@@ -860,6 +881,8 @@ module GraphQL
|
|
860
881
|
schema_defn.default_max_page_size = default_max_page_size
|
861
882
|
schema_defn.orphan_types = orphan_types.map(&:graphql_definition)
|
862
883
|
schema_defn.disable_introspection_entry_points = disable_introspection_entry_points?
|
884
|
+
schema_defn.disable_schema_introspection_entry_point = disable_schema_introspection_entry_point?
|
885
|
+
schema_defn.disable_type_introspection_entry_point = disable_type_introspection_entry_point?
|
863
886
|
|
864
887
|
prepped_dirs = {}
|
865
888
|
directives.each { |k, v| prepped_dirs[k] = v.graphql_definition}
|
@@ -1202,6 +1225,18 @@ module GraphQL
|
|
1202
1225
|
@introspection_system = nil
|
1203
1226
|
end
|
1204
1227
|
|
1228
|
+
def disable_schema_introspection_entry_point
|
1229
|
+
@disable_schema_introspection_entry_point = true
|
1230
|
+
# TODO: this clears the cache made in `def types`. But this is not a great solution.
|
1231
|
+
@introspection_system = nil
|
1232
|
+
end
|
1233
|
+
|
1234
|
+
def disable_type_introspection_entry_point
|
1235
|
+
@disable_type_introspection_entry_point = true
|
1236
|
+
# TODO: this clears the cache made in `def types`. But this is not a great solution.
|
1237
|
+
@introspection_system = nil
|
1238
|
+
end
|
1239
|
+
|
1205
1240
|
def disable_introspection_entry_points?
|
1206
1241
|
if instance_variable_defined?(:@disable_introspection_entry_points)
|
1207
1242
|
@disable_introspection_entry_points
|
@@ -1210,6 +1245,22 @@ module GraphQL
|
|
1210
1245
|
end
|
1211
1246
|
end
|
1212
1247
|
|
1248
|
+
def disable_schema_introspection_entry_point?
|
1249
|
+
if instance_variable_defined?(:@disable_schema_introspection_entry_point)
|
1250
|
+
@disable_schema_introspection_entry_point
|
1251
|
+
else
|
1252
|
+
find_inherited_value(:disable_schema_introspection_entry_point?, false)
|
1253
|
+
end
|
1254
|
+
end
|
1255
|
+
|
1256
|
+
def disable_type_introspection_entry_point?
|
1257
|
+
if instance_variable_defined?(:@disable_type_introspection_entry_point)
|
1258
|
+
@disable_type_introspection_entry_point
|
1259
|
+
else
|
1260
|
+
find_inherited_value(:disable_type_introspection_entry_point?, false)
|
1261
|
+
end
|
1262
|
+
end
|
1263
|
+
|
1213
1264
|
def orphan_types(*new_orphan_types)
|
1214
1265
|
if new_orphan_types.any?
|
1215
1266
|
new_orphan_types = new_orphan_types.flatten
|
@@ -1292,11 +1343,11 @@ module GraphQL
|
|
1292
1343
|
end
|
1293
1344
|
|
1294
1345
|
def visible?(member, ctx)
|
1295
|
-
member.visible?(ctx)
|
1346
|
+
member.type_class.visible?(ctx)
|
1296
1347
|
end
|
1297
1348
|
|
1298
1349
|
def accessible?(member, ctx)
|
1299
|
-
member.accessible?(ctx)
|
1350
|
+
member.type_class.accessible?(ctx)
|
1300
1351
|
end
|
1301
1352
|
|
1302
1353
|
# This hook is called when a client tries to access one or more
|
@@ -129,7 +129,11 @@ module GraphQL
|
|
129
129
|
end
|
130
130
|
|
131
131
|
using.each do |plugin, options|
|
132
|
-
|
132
|
+
if options
|
133
|
+
use(plugin, **options)
|
134
|
+
else
|
135
|
+
use(plugin)
|
136
|
+
end
|
133
137
|
end
|
134
138
|
end
|
135
139
|
end
|
@@ -196,6 +200,7 @@ module GraphQL
|
|
196
200
|
builder = self
|
197
201
|
type_def = nil
|
198
202
|
typed_resolve_fn = ->(field, obj, args, ctx) { default_resolve.call(type_def, field, obj, args, ctx) }
|
203
|
+
|
199
204
|
Class.new(GraphQL::Schema::Object) do
|
200
205
|
type_def = self
|
201
206
|
graphql_name(object_type_definition.name)
|
@@ -9,8 +9,14 @@ module GraphQL
|
|
9
9
|
class Directive < GraphQL::Schema::Member
|
10
10
|
extend GraphQL::Schema::Member::HasArguments
|
11
11
|
class << self
|
12
|
+
# Return a name based on the class name,
|
13
|
+
# but downcase the first letter.
|
12
14
|
def default_graphql_name
|
13
|
-
|
15
|
+
@default_graphql_name ||= begin
|
16
|
+
camelized_name = super
|
17
|
+
camelized_name[0] = camelized_name[0].downcase
|
18
|
+
camelized_name
|
19
|
+
end
|
14
20
|
end
|
15
21
|
|
16
22
|
def locations(*new_locations)
|
@@ -26,6 +26,7 @@ module GraphQL
|
|
26
26
|
# enum_value_class CustomEnumValue
|
27
27
|
# end
|
28
28
|
class EnumValue < GraphQL::Schema::Member
|
29
|
+
include GraphQL::Schema::Member::CachedGraphQLDefinition
|
29
30
|
include GraphQL::Schema::Member::AcceptsDefinition
|
30
31
|
include GraphQL::Schema::Member::HasPath
|
31
32
|
include GraphQL::Schema::Member::HasAstNode
|
@@ -34,7 +34,10 @@ module GraphQL
|
|
34
34
|
if schema.disable_introspection_entry_points?
|
35
35
|
{}
|
36
36
|
else
|
37
|
-
get_fields_from_class(class_sym: :EntryPoints)
|
37
|
+
entry_point_fields = get_fields_from_class(class_sym: :EntryPoints)
|
38
|
+
entry_point_fields.delete('__schema') if schema.disable_schema_introspection_entry_point?
|
39
|
+
entry_point_fields.delete('__type') if schema.disable_type_introspection_entry_point?
|
40
|
+
entry_point_fields
|
38
41
|
end
|
39
42
|
@dynamic_fields = get_fields_from_class(class_sym: :DynamicFields)
|
40
43
|
end
|
data/lib/graphql/schema/list.rb
CHANGED
@@ -36,12 +36,16 @@ module GraphQL
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def coerce_input(value, ctx)
|
39
|
-
|
39
|
+
if value.nil?
|
40
|
+
nil
|
41
|
+
else
|
42
|
+
ensure_array(value).map { |item| item.nil? ? item : of_type.coerce_input(item, ctx) }
|
43
|
+
end
|
40
44
|
end
|
41
45
|
|
42
46
|
def validate_non_null_input(value, ctx)
|
43
47
|
result = GraphQL::Query::InputValidationResult.new
|
44
|
-
|
48
|
+
ensure_array(value).each_with_index do |item, index|
|
45
49
|
item_result = of_type.validate_input(item, ctx)
|
46
50
|
if !item_result.valid?
|
47
51
|
result.merge_result!(index, item_result)
|
@@ -49,6 +53,17 @@ module GraphQL
|
|
49
53
|
end
|
50
54
|
result
|
51
55
|
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def ensure_array(value)
|
60
|
+
# `Array({ a: 1 })` makes `[[:a, 1]]`, so do it manually
|
61
|
+
if value.is_a?(Array)
|
62
|
+
value
|
63
|
+
else
|
64
|
+
[value]
|
65
|
+
end
|
66
|
+
end
|
52
67
|
end
|
53
68
|
end
|
54
69
|
end
|
@@ -124,14 +124,20 @@ module GraphQL
|
|
124
124
|
}]
|
125
125
|
)
|
126
126
|
when "FIELD"
|
127
|
-
|
127
|
+
defns = {
|
128
128
|
name: type["name"],
|
129
129
|
type: type_resolver.call(type["type"]),
|
130
130
|
description: type["description"],
|
131
|
-
|
131
|
+
}
|
132
|
+
|
133
|
+
# Avoid passing an empty hash, which warns on Ruby 2.7
|
134
|
+
if type["args"].any?
|
135
|
+
defns[:arguments] = Hash[type["args"].map { |arg|
|
132
136
|
[arg["name"], define_type(arg.merge("kind" => "ARGUMENT"), type_resolver)]
|
133
137
|
}]
|
134
|
-
|
138
|
+
end
|
139
|
+
|
140
|
+
GraphQL::Field.define(**defns)
|
135
141
|
when "ARGUMENT"
|
136
142
|
kwargs = {}
|
137
143
|
if type["defaultValue"]
|
@@ -64,7 +64,7 @@ module GraphQL
|
|
64
64
|
|
65
65
|
class << self
|
66
66
|
# Override this method to handle legacy-style usages of `MyMutation.field`
|
67
|
-
def field(*args, &block)
|
67
|
+
def field(*args, **kwargs, &block)
|
68
68
|
if args.empty?
|
69
69
|
raise ArgumentError, "#{name}.field is used for adding fields to this mutation. Use `mutation: #{name}` to attach this mutation instead."
|
70
70
|
else
|
@@ -76,7 +76,7 @@ module GraphQL
|
|
76
76
|
context.schema.after_lazy(load_arguments_val) do |loaded_args|
|
77
77
|
# Then call `authorized?`, which may raise or may return a lazy object
|
78
78
|
authorized_val = if loaded_args.any?
|
79
|
-
authorized?(loaded_args)
|
79
|
+
authorized?(**loaded_args)
|
80
80
|
else
|
81
81
|
authorized?
|
82
82
|
end
|
@@ -39,12 +39,12 @@ module GraphQL
|
|
39
39
|
def resolve(**args)
|
40
40
|
# Dispatch based on `@mode`, which will raise a `NoMethodError` if we ever
|
41
41
|
# have an unexpected `@mode`
|
42
|
-
public_send("resolve_#{@mode}", args)
|
42
|
+
public_send("resolve_#{@mode}", **args)
|
43
43
|
end
|
44
44
|
|
45
45
|
# Wrap the user-defined `#subscribe` hook
|
46
|
-
def resolve_subscribe(args)
|
47
|
-
ret_val = args.any? ? subscribe(args) : subscribe
|
46
|
+
def resolve_subscribe(**args)
|
47
|
+
ret_val = args.any? ? subscribe(**args) : subscribe
|
48
48
|
if ret_val == :no_response
|
49
49
|
context.skip
|
50
50
|
else
|
@@ -62,8 +62,8 @@ module GraphQL
|
|
62
62
|
end
|
63
63
|
|
64
64
|
# Wrap the user-provided `#update` hook
|
65
|
-
def resolve_update(args)
|
66
|
-
ret_val = args.any? ? update(args) : update
|
65
|
+
def resolve_update(**args)
|
66
|
+
ret_val = args.any? ? update(**args) : update
|
67
67
|
if ret_val == :no_update
|
68
68
|
raise NoUpdateError
|
69
69
|
else
|
@@ -19,7 +19,7 @@ module GraphQL
|
|
19
19
|
# @param abstract_type [Class<GraphQL::Schema::Union>, Module<GraphQL::Schema::Interface>]
|
20
20
|
# @param object_type [Class<GraphQL::Schema::Object>]
|
21
21
|
# @param options [Hash] Any options passed to `.possible_types` or `.implements`
|
22
|
-
def initialize(abstract_type, object_type, options)
|
22
|
+
def initialize(abstract_type, object_type, **options)
|
23
23
|
@abstract_type = abstract_type
|
24
24
|
@object_type = object_type
|
25
25
|
@options = options
|
data/lib/graphql/schema/union.rb
CHANGED
@@ -8,7 +8,7 @@ module GraphQL
|
|
8
8
|
def possible_types(*types, context: GraphQL::Query::NullContext, **options)
|
9
9
|
if types.any?
|
10
10
|
types.each do |t|
|
11
|
-
type_memberships << type_membership_class.new(self, t, options)
|
11
|
+
type_memberships << type_membership_class.new(self, t, **options)
|
12
12
|
end
|
13
13
|
else
|
14
14
|
visible_types = []
|
@@ -28,7 +28,7 @@ module GraphQL
|
|
28
28
|
defn.instrument(:query, instrumentation)
|
29
29
|
defn.instrument(:field, instrumentation)
|
30
30
|
options[:schema] = schema
|
31
|
-
schema.subscriptions = self.new(options)
|
31
|
+
schema.subscriptions = self.new(**options)
|
32
32
|
nil
|
33
33
|
end
|
34
34
|
|
@@ -95,7 +95,7 @@ module GraphQL
|
|
95
95
|
operation_name = query_data.fetch(:operation_name)
|
96
96
|
# Re-evaluate the saved query
|
97
97
|
result = @schema.execute(
|
98
|
-
{
|
98
|
+
**{
|
99
99
|
query: query_string,
|
100
100
|
context: context,
|
101
101
|
subscription_topic: event.topic,
|