graphql 1.8.14 → 1.8.15
Sign up to get free protection for your applications and to get access to all the features.
- 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
|