graphql 1.8.14 → 1.8.15
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.
- checksums.yaml +4 -4
- data/lib/graphql/execution/execute.rb +16 -14
- data/lib/graphql/query/arguments.rb +1 -1
- data/lib/graphql/schema.rb +11 -8
- data/lib/graphql/schema/member/instrumentation.rb +10 -7
- data/lib/graphql/schema/resolver.rb +10 -10
- data/lib/graphql/version.rb +1 -1
- data/spec/integration/rails/graphql/relay/mutation_spec.rb +48 -0
- data/spec/support/jazz.rb +6 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2d518263838aebce2b708ac2ac6938e782a486c
|
4
|
+
data.tar.gz: 84fe5c02047ea67acf4a9950cbb14bcfd6d9fbfa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99fc75e928c224adf82a8658b9f8cd0a821f6909e2775bd58c401fb2192db43f440f4d1a7bb9f22fb4a5fdebd5f5a80235e566dd9b0e80df365b8a566893b994
|
7
|
+
data.tar.gz: d9ee1715ba8eac2d2b4cc788fe78d3383722a27f69966d140bc90e68a7564622f7e239653f2e9581471fa33c0339f822a3b415db9f2b0ce325fbebfa1c80f190
|
@@ -264,20 +264,22 @@ module GraphQL
|
|
264
264
|
)
|
265
265
|
when GraphQL::TypeKinds::UNION, GraphQL::TypeKinds::INTERFACE
|
266
266
|
query = field_ctx.query
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
267
|
+
resolved_type_or_lazy = field_type.resolve_type(value, field_ctx)
|
268
|
+
query.schema.after_lazy(resolved_type_or_lazy) do |resolved_type|
|
269
|
+
possible_types = query.possible_types(field_type)
|
270
|
+
|
271
|
+
if !possible_types.include?(resolved_type)
|
272
|
+
parent_type = field_ctx.irep_node.owner_type
|
273
|
+
type_error = GraphQL::UnresolvedTypeError.new(value, field_defn, parent_type, resolved_type, possible_types)
|
274
|
+
field_ctx.schema.type_error(type_error, field_ctx)
|
275
|
+
PROPAGATE_NULL
|
276
|
+
else
|
277
|
+
resolve_value(
|
278
|
+
value,
|
279
|
+
resolved_type,
|
280
|
+
field_ctx,
|
281
|
+
)
|
282
|
+
end
|
281
283
|
end
|
282
284
|
else
|
283
285
|
raise("Unknown type kind: #{field_type.kind}")
|
data/lib/graphql/schema.rb
CHANGED
@@ -480,17 +480,20 @@ module GraphQL
|
|
480
480
|
yield(type, object, ctx)
|
481
481
|
end
|
482
482
|
|
483
|
-
if type_result.respond_to?(:graphql_definition)
|
484
|
-
type_result = type_result.graphql_definition
|
485
|
-
end
|
486
|
-
|
487
483
|
if type_result.nil?
|
488
484
|
nil
|
489
|
-
elsif !type_result.is_a?(GraphQL::BaseType)
|
490
|
-
type_str = "#{type_result} (#{type_result.class.name})"
|
491
|
-
raise "resolve_type(#{object}) returned #{type_str}, but it should return a GraphQL type"
|
492
485
|
else
|
493
|
-
type_result
|
486
|
+
after_lazy(type_result) do |resolved_type_result|
|
487
|
+
if resolved_type_result.respond_to?(:graphql_definition)
|
488
|
+
resolved_type_result = resolved_type_result.graphql_definition
|
489
|
+
end
|
490
|
+
if !resolved_type_result.is_a?(GraphQL::BaseType)
|
491
|
+
type_str = "#{resolved_type_result} (#{resolved_type_result.class.name})"
|
492
|
+
raise "resolve_type(#{object}) returned #{type_str}, but it should return a GraphQL type"
|
493
|
+
else
|
494
|
+
resolved_type_result
|
495
|
+
end
|
496
|
+
end
|
494
497
|
end
|
495
498
|
end
|
496
499
|
|
@@ -91,7 +91,7 @@ module GraphQL
|
|
91
91
|
# For lists with nil, we need another nil check here
|
92
92
|
nil
|
93
93
|
else
|
94
|
-
|
94
|
+
concrete_type_or_lazy = case @inner_return_type
|
95
95
|
when GraphQL::UnionType, GraphQL::InterfaceType
|
96
96
|
ctx.query.resolve_type(@inner_return_type, inner_obj)
|
97
97
|
when GraphQL::ObjectType
|
@@ -100,12 +100,15 @@ module GraphQL
|
|
100
100
|
raise "unexpected proxying type #{@inner_return_type} for #{inner_obj} at #{ctx.owner_type}.#{ctx.field.name}"
|
101
101
|
end
|
102
102
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
103
|
+
# .resolve_type may have returned a lazy
|
104
|
+
ctx.schema.after_lazy(concrete_type_or_lazy) do |concrete_type|
|
105
|
+
if concrete_type && (object_class = concrete_type.metadata[:type_class])
|
106
|
+
# use the query-level context here, since it won't be field-specific anyways
|
107
|
+
query_ctx = ctx.query.context
|
108
|
+
object_class.authorized_new(inner_obj, query_ctx)
|
109
|
+
else
|
110
|
+
inner_obj
|
111
|
+
end
|
109
112
|
end
|
110
113
|
end
|
111
114
|
end
|
@@ -199,13 +199,13 @@ module GraphQL
|
|
199
199
|
# See if any object can be found for this ID
|
200
200
|
loaded_application_object = object_from_id(lookup_as_type, id, context)
|
201
201
|
context.schema.after_lazy(loaded_application_object) do |application_object|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
202
|
+
if application_object.nil?
|
203
|
+
raise LoadApplicationObjectFailedError.new(argument: argument, id: id, object: application_object)
|
204
|
+
end
|
205
|
+
# Double-check that the located object is actually of this type
|
206
|
+
# (Don't want to allow arbitrary access to objects this way)
|
207
|
+
resolved_application_object_type = context.schema.resolve_type(lookup_as_type, application_object, context)
|
208
|
+
context.schema.after_lazy(resolved_application_object_type) do |application_object_type|
|
209
209
|
possible_object_types = context.schema.possible_types(lookup_as_type)
|
210
210
|
if !possible_object_types.include?(application_object_type)
|
211
211
|
raise LoadApplicationObjectFailedError.new(argument: argument, id: id, object: application_object)
|
@@ -229,11 +229,11 @@ module GraphQL
|
|
229
229
|
application_object
|
230
230
|
end
|
231
231
|
end
|
232
|
-
rescue LoadApplicationObjectFailedError => err
|
233
|
-
# pass it to a handler
|
234
|
-
load_application_object_failed(err)
|
235
232
|
end
|
236
233
|
end
|
234
|
+
rescue LoadApplicationObjectFailedError => err
|
235
|
+
# pass it to a handler
|
236
|
+
load_application_object_failed(err)
|
237
237
|
end
|
238
238
|
|
239
239
|
def load_application_object_failed(err)
|
data/lib/graphql/version.rb
CHANGED
@@ -336,4 +336,52 @@ describe GraphQL::Relay::Mutation do
|
|
336
336
|
assert_equal(expected, result)
|
337
337
|
end
|
338
338
|
end
|
339
|
+
|
340
|
+
describe 'supports new input object definition with old mutation definition' do
|
341
|
+
let(:some_attribute_type) do
|
342
|
+
Class.new(GraphQL::Schema::InputObject) do
|
343
|
+
graphql_name 'SomeAttribute'
|
344
|
+
argument :something, String, required: false
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
let(:do_something_mutation) do
|
349
|
+
some_attribute = some_attribute_type
|
350
|
+
|
351
|
+
GraphQL::Relay::Mutation.define do
|
352
|
+
name 'DoSomethingMutation'
|
353
|
+
input_field :someAttributes, types[some_attribute.graphql_definition]
|
354
|
+
|
355
|
+
return_field :anything, types.String
|
356
|
+
|
357
|
+
resolve ->(_obj, inputs, _ctx) {
|
358
|
+
{
|
359
|
+
anything: inputs.to_h['someAttributes'][0].class.to_s
|
360
|
+
}
|
361
|
+
}
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
let(:mutation_type) do
|
366
|
+
do_something = do_something_mutation
|
367
|
+
|
368
|
+
Class.new(GraphQL::Schema::Object) do
|
369
|
+
graphql_name 'Mutation'
|
370
|
+
field :doSomething, field: do_something.field
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
let(:schema) do
|
375
|
+
mutation = mutation_type
|
376
|
+
|
377
|
+
Class.new(GraphQL::Schema) do
|
378
|
+
mutation mutation
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
it 'converts to hash the whole input' do
|
383
|
+
result = schema.execute('mutation { doSomething(input: {someAttributes: [{something: "string"}]}) { anything } }')
|
384
|
+
assert_equal 'Hash', result['data']['doSomething']['anything']
|
385
|
+
end
|
386
|
+
end
|
339
387
|
end
|
data/spec/support/jazz.rb
CHANGED
@@ -310,10 +310,12 @@ module Jazz
|
|
310
310
|
possible_types Musician, Ensemble
|
311
311
|
|
312
312
|
def self.resolve_type(object, context)
|
313
|
-
|
314
|
-
Ensemble
|
315
|
-
|
316
|
-
|
313
|
+
GraphQL::Execution::Lazy.new do
|
314
|
+
if object.is_a?(Models::Ensemble)
|
315
|
+
Ensemble
|
316
|
+
else
|
317
|
+
Musician
|
318
|
+
end
|
317
319
|
end
|
318
320
|
end
|
319
321
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ips
|