rails-graphql 1.0.0.beta → 1.0.0.rc2
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/ext/gql_parser.c +1 -16
- data/ext/gql_parser.h +21 -0
- data/ext/shared.c +0 -5
- data/ext/shared.h +6 -6
- data/lib/generators/graphql/channel_generator.rb +27 -0
- data/lib/generators/graphql/controller_generator.rb +9 -4
- data/lib/generators/graphql/install_generator.rb +49 -0
- data/lib/generators/graphql/schema_generator.rb +9 -4
- data/lib/generators/graphql/templates/channel.erb +7 -0
- data/lib/generators/graphql/templates/config.rb +97 -0
- data/lib/generators/graphql/templates/controller.erb +2 -0
- data/lib/generators/graphql/templates/schema.erb +5 -3
- data/lib/gql_parser.so +0 -0
- data/lib/rails/graphql/alternative/field_set.rb +12 -0
- data/lib/rails/graphql/alternative/query.rb +13 -8
- data/lib/rails/graphql/alternative/subscription.rb +2 -1
- data/lib/rails/graphql/alternative.rb +4 -0
- data/lib/rails/graphql/argument.rb +5 -3
- data/lib/rails/graphql/callback.rb +10 -8
- data/lib/rails/graphql/collectors/hash_collector.rb +12 -1
- data/lib/rails/graphql/collectors/json_collector.rb +21 -0
- data/lib/rails/graphql/config.rb +86 -59
- data/lib/rails/graphql/directive/include_directive.rb +0 -1
- data/lib/rails/graphql/directive/skip_directive.rb +0 -1
- data/lib/rails/graphql/directive/specified_by_directive.rb +24 -0
- data/lib/rails/graphql/directive.rb +31 -25
- data/lib/rails/graphql/event.rb +7 -6
- data/lib/rails/graphql/field/authorized_field.rb +0 -5
- data/lib/rails/graphql/field/input_field.rb +0 -5
- data/lib/rails/graphql/field/mutation_field.rb +5 -6
- data/lib/rails/graphql/field/output_field.rb +13 -2
- data/lib/rails/graphql/field/proxied_field.rb +6 -6
- data/lib/rails/graphql/field/resolved_field.rb +1 -1
- data/lib/rails/graphql/field/subscription_field.rb +35 -52
- data/lib/rails/graphql/field/typed_field.rb +26 -2
- data/lib/rails/graphql/field.rb +20 -19
- data/lib/rails/graphql/global_id.rb +5 -1
- data/lib/rails/graphql/helpers/inherited_collection/array.rb +1 -0
- data/lib/rails/graphql/helpers/inherited_collection/base.rb +3 -1
- data/lib/rails/graphql/helpers/inherited_collection/hash.rb +2 -1
- data/lib/rails/graphql/helpers/registerable.rb +1 -1
- data/lib/rails/graphql/helpers/with_arguments.rb +3 -2
- data/lib/rails/graphql/helpers/with_assignment.rb +5 -5
- data/lib/rails/graphql/helpers/with_callbacks.rb +3 -3
- data/lib/rails/graphql/helpers/with_description.rb +10 -8
- data/lib/rails/graphql/helpers/with_directives.rb +5 -1
- data/lib/rails/graphql/helpers/with_events.rb +1 -0
- data/lib/rails/graphql/helpers/with_fields.rb +30 -24
- data/lib/rails/graphql/helpers/with_name.rb +3 -2
- data/lib/rails/graphql/helpers/with_schema_fields.rb +75 -51
- data/lib/rails/graphql/introspection.rb +1 -1
- data/lib/rails/graphql/railtie.rb +3 -2
- data/lib/rails/graphql/railties/app/base_channel.rb +10 -0
- data/lib/rails/graphql/railties/app/base_controller.rb +12 -0
- data/lib/rails/graphql/railties/app/views/_cable.js.erb +56 -0
- data/lib/rails/graphql/railties/app/views/_fetch.js.erb +20 -0
- data/lib/rails/graphql/railties/app/views/graphiql.html.erb +101 -0
- data/lib/rails/graphql/railties/base_generator.rb +3 -9
- data/lib/rails/graphql/railties/channel.rb +8 -8
- data/lib/rails/graphql/railties/controller.rb +51 -26
- data/lib/rails/graphql/request/arguments.rb +2 -1
- data/lib/rails/graphql/request/backtrace.rb +31 -10
- data/lib/rails/graphql/request/component/field.rb +15 -8
- data/lib/rails/graphql/request/component/fragment.rb +13 -7
- data/lib/rails/graphql/request/component/operation/subscription.rb +4 -6
- data/lib/rails/graphql/request/component/operation.rb +12 -5
- data/lib/rails/graphql/request/component/spread.rb +13 -4
- data/lib/rails/graphql/request/component/typename.rb +1 -1
- data/lib/rails/graphql/request/component.rb +2 -0
- data/lib/rails/graphql/request/context.rb +1 -1
- data/lib/rails/graphql/request/event.rb +6 -2
- data/lib/rails/graphql/request/helpers/directives.rb +1 -0
- data/lib/rails/graphql/request/helpers/selection_set.rb +10 -4
- data/lib/rails/graphql/request/helpers/value_writers.rb +8 -5
- data/lib/rails/graphql/request/prepared_data.rb +3 -1
- data/lib/rails/graphql/request/steps/organizable.rb +1 -1
- data/lib/rails/graphql/request/steps/preparable.rb +1 -1
- data/lib/rails/graphql/request/steps/resolvable.rb +1 -1
- data/lib/rails/graphql/request/strategy/sequenced_strategy.rb +3 -3
- data/lib/rails/graphql/request/strategy.rb +18 -4
- data/lib/rails/graphql/request/subscription.rb +18 -16
- data/lib/rails/graphql/request.rb +71 -41
- data/lib/rails/graphql/schema.rb +39 -86
- data/lib/rails/graphql/shortcuts.rb +11 -5
- data/lib/rails/graphql/source/active_record/builders.rb +22 -24
- data/lib/rails/graphql/source/active_record_source.rb +96 -34
- data/lib/rails/graphql/source/base.rb +13 -40
- data/lib/rails/graphql/source/builder.rb +14 -22
- data/lib/rails/graphql/source/scoped_arguments.rb +10 -4
- data/lib/rails/graphql/source.rb +31 -38
- data/lib/rails/graphql/subscription/provider/action_cable.rb +10 -9
- data/lib/rails/graphql/subscription/provider/base.rb +6 -5
- data/lib/rails/graphql/subscription/store/base.rb +5 -9
- data/lib/rails/graphql/subscription/store/memory.rb +18 -9
- data/lib/rails/graphql/type/creator.rb +198 -0
- data/lib/rails/graphql/type/enum.rb +17 -9
- data/lib/rails/graphql/type/input.rb +30 -7
- data/lib/rails/graphql/type/interface.rb +15 -4
- data/lib/rails/graphql/type/object/directive_object.rb +6 -5
- data/lib/rails/graphql/type/object/input_value_object.rb +3 -4
- data/lib/rails/graphql/type/object/type_object.rb +40 -13
- data/lib/rails/graphql/type/object.rb +11 -6
- data/lib/rails/graphql/type/scalar/binary_scalar.rb +2 -0
- data/lib/rails/graphql/type/scalar/date_scalar.rb +2 -0
- data/lib/rails/graphql/type/scalar/date_time_scalar.rb +2 -0
- data/lib/rails/graphql/type/scalar/decimal_scalar.rb +2 -0
- data/lib/rails/graphql/type/scalar/json_scalar.rb +3 -1
- data/lib/rails/graphql/type/scalar/time_scalar.rb +3 -1
- data/lib/rails/graphql/type/scalar.rb +2 -2
- data/lib/rails/graphql/type/union.rb +7 -2
- data/lib/rails/graphql/type.rb +10 -2
- data/lib/rails/graphql/type_map.rb +20 -7
- data/lib/rails/graphql/uri.rb +5 -4
- data/lib/rails/graphql/version.rb +6 -2
- data/lib/rails/graphql.rb +11 -8
- data/test/assets/introspection-mem.txt +1 -1
- data/test/assets/introspection.gql +2 -0
- data/test/assets/mem.gql +74 -60
- data/test/assets/mysql.gql +69 -55
- data/test/assets/sqlite.gql +78 -64
- data/test/assets/translate.gql +50 -39
- data/test/config.rb +2 -1
- data/test/graphql/schema_test.rb +2 -31
- data/test/graphql/source_test.rb +1 -11
- data/test/graphql/type/interface_test.rb +8 -5
- data/test/graphql/type/object_test.rb +8 -2
- data/test/graphql/type_map_test.rb +13 -16
- data/test/integration/global_id_test.rb +4 -4
- data/test/integration/memory/star_wars_validation_test.rb +2 -2
- data/test/integration/mysql/star_wars_introspection_test.rb +1 -1
- data/test/integration/resolver_precedence_test.rb +1 -1
- data/test/integration/schemas/memory.rb +3 -4
- data/test/integration/sqlite/star_wars_global_id_test.rb +27 -21
- data/test/integration/sqlite/star_wars_introspection_test.rb +1 -1
- data/test/integration/translate_test.rb +26 -14
- metadata +22 -9
data/test/assets/sqlite.gql
CHANGED
@@ -16,22 +16,22 @@ scalar Bigint
|
|
16
16
|
The Binary scalar type represents a Base64 string.
|
17
17
|
Normally used to share files and uploads.
|
18
18
|
"""
|
19
|
-
scalar Binary
|
19
|
+
scalar Binary @specifiedBy(url: "https://www.rfc-editor.org/rfc/rfc3548")
|
20
20
|
|
21
21
|
"The Boolean scalar type represents true or false."
|
22
22
|
scalar Boolean
|
23
23
|
|
24
24
|
"The Date scalar type represents a ISO 8601 string value."
|
25
|
-
scalar Date
|
25
|
+
scalar Date @specifiedBy(url: "https://en.wikipedia.org/wiki/ISO_8601")
|
26
26
|
|
27
27
|
"The DateTime scalar type represents a ISO 8601 string value."
|
28
|
-
scalar DateTime
|
28
|
+
scalar DateTime @specifiedBy(url: "https://en.wikipedia.org/wiki/ISO_8601")
|
29
29
|
|
30
30
|
"""
|
31
31
|
The Decimal scalar type represents signed fractional values with extra precision.
|
32
32
|
The values are exchange as string.
|
33
33
|
"""
|
34
|
-
scalar Decimal
|
34
|
+
scalar Decimal @specifiedBy(url: "https://en.wikipedia.org/wiki/IEEE_754-2008_revision")
|
35
35
|
|
36
36
|
"The Float scalar type represents signed double-precision fractional values."
|
37
37
|
scalar Float
|
@@ -47,9 +47,9 @@ scalar Int
|
|
47
47
|
|
48
48
|
"""
|
49
49
|
The JSON scalar type represents an unstructured JSON data
|
50
|
-
with all its available
|
50
|
+
with all its available keys and values.
|
51
51
|
"""
|
52
|
-
scalar JSON
|
52
|
+
scalar JSON @specifiedBy(url: "https://www.rfc-editor.org/rfc/rfc8259")
|
53
53
|
|
54
54
|
"""
|
55
55
|
The String scalar type represents textual data, represented as UTF-8 character
|
@@ -59,9 +59,9 @@ scalar String
|
|
59
59
|
|
60
60
|
"""
|
61
61
|
The Time scalar type that represents a distance in time using hours,
|
62
|
-
minutes, seconds, and
|
62
|
+
minutes, seconds, and milliseconds.
|
63
63
|
"""
|
64
|
-
scalar Time
|
64
|
+
scalar Time @specifiedBy(url: "https://en.wikipedia.org/wiki/ISO_8601")
|
65
65
|
|
66
66
|
"The valid locations that a directive may be placed."
|
67
67
|
enum __DirectiveLocation {
|
@@ -154,25 +154,25 @@ enum __TypeKind {
|
|
154
154
|
input LiteBaseInput {
|
155
155
|
id: ID
|
156
156
|
|
157
|
+
_delete: Boolean = false
|
158
|
+
|
157
159
|
factionId: ID
|
158
160
|
|
159
161
|
name: String!
|
160
162
|
|
161
163
|
planet: String
|
162
|
-
|
163
|
-
_delete: Boolean = false
|
164
164
|
}
|
165
165
|
|
166
166
|
# Assigned to LiteFaction class
|
167
167
|
input LiteFactionInput {
|
168
168
|
id: ID
|
169
169
|
|
170
|
-
name: String
|
171
|
-
|
172
170
|
_delete: Boolean = false
|
173
171
|
|
174
172
|
basesAttributes: [LiteBaseInput!]
|
175
173
|
|
174
|
+
name: String
|
175
|
+
|
176
176
|
shipsAttributes: [LiteShipInput!]
|
177
177
|
}
|
178
178
|
|
@@ -180,34 +180,34 @@ input LiteFactionInput {
|
|
180
180
|
input LiteShipInput {
|
181
181
|
id: ID
|
182
182
|
|
183
|
+
_delete: Boolean = false
|
184
|
+
|
183
185
|
factionId: ID
|
184
186
|
|
185
187
|
name: String
|
186
|
-
|
187
|
-
_delete: Boolean = false
|
188
188
|
}
|
189
189
|
|
190
190
|
# Assigned to LiteBase class
|
191
191
|
type LiteBase {
|
192
192
|
id: ID!
|
193
193
|
|
194
|
+
faction: LiteFaction
|
195
|
+
|
194
196
|
factionId: ID
|
195
197
|
|
196
198
|
name: String!
|
197
199
|
|
198
200
|
planet: String
|
199
|
-
|
200
|
-
faction: LiteFaction
|
201
201
|
}
|
202
202
|
|
203
203
|
# Assigned to LiteFaction class
|
204
204
|
type LiteFaction {
|
205
205
|
id: ID!
|
206
206
|
|
207
|
-
name: String
|
208
|
-
|
209
207
|
bases: [LiteBase!]!
|
210
208
|
|
209
|
+
name: String
|
210
|
+
|
211
211
|
ships: [LiteShip!]!
|
212
212
|
}
|
213
213
|
|
@@ -215,31 +215,31 @@ type LiteFaction {
|
|
215
215
|
type LiteShip {
|
216
216
|
id: ID!
|
217
217
|
|
218
|
+
faction: LiteFaction
|
219
|
+
|
218
220
|
factionId: ID
|
219
221
|
|
220
222
|
name: String
|
221
|
-
|
222
|
-
faction: LiteFaction
|
223
223
|
}
|
224
224
|
|
225
225
|
type _Mutation {
|
226
|
+
createLiteBase(liteBase: LiteBaseInput!): LiteBase!
|
227
|
+
|
226
228
|
createLiteFaction(liteFaction: LiteFactionInput!): LiteFaction!
|
227
229
|
|
228
|
-
|
230
|
+
createLiteShip(liteShip: LiteShipInput!): LiteShip!
|
231
|
+
|
232
|
+
deleteLiteBase(id: ID!): Boolean!
|
229
233
|
|
230
234
|
deleteLiteFaction(id: ID!): Boolean!
|
231
235
|
|
232
|
-
|
236
|
+
deleteLiteShip(id: ID!): Boolean!
|
233
237
|
|
234
238
|
updateLiteBase(id: ID!, liteBase: LiteBaseInput!): LiteBase!
|
235
239
|
|
236
|
-
|
237
|
-
|
238
|
-
createLiteShip(liteShip: LiteShipInput!): LiteShip!
|
240
|
+
updateLiteFaction(id: ID!, liteFaction: LiteFactionInput!): LiteFaction!
|
239
241
|
|
240
242
|
updateLiteShip(id: ID!, liteShip: LiteShipInput!): LiteShip!
|
241
|
-
|
242
|
-
deleteLiteShip(id: ID!): Boolean!
|
243
243
|
}
|
244
244
|
|
245
245
|
type _Query {
|
@@ -247,17 +247,17 @@ type _Query {
|
|
247
247
|
|
248
248
|
__type(name: String!): __Type
|
249
249
|
|
250
|
-
|
251
|
-
|
252
|
-
liteFaction(id: ID!): LiteFaction!
|
250
|
+
liteBase(id: ID!): LiteBase!
|
253
251
|
|
254
252
|
liteBases(order: String = "desc"): [LiteBase!]!
|
255
253
|
|
256
|
-
|
254
|
+
liteFaction(id: ID!): LiteFaction!
|
257
255
|
|
258
|
-
|
256
|
+
liteFactions(order: String): [LiteFaction!]!
|
259
257
|
|
260
258
|
liteShip(id: ID!): LiteShip!
|
259
|
+
|
260
|
+
liteShips: [LiteShip!]!
|
261
261
|
}
|
262
262
|
|
263
263
|
"""
|
@@ -271,13 +271,15 @@ additional information to the executor.
|
|
271
271
|
"""
|
272
272
|
# Assigned to Rails::GraphQL::Directive class
|
273
273
|
type __Directive {
|
274
|
-
|
274
|
+
args: [__InputValue!]!
|
275
275
|
|
276
276
|
description: String
|
277
277
|
|
278
|
+
isRepeatable: Boolean!
|
279
|
+
|
278
280
|
locations: [__DirectiveLocation!]!
|
279
281
|
|
280
|
-
|
282
|
+
name: String!
|
281
283
|
}
|
282
284
|
|
283
285
|
"""
|
@@ -286,13 +288,13 @@ of values. It's a string representation, not a numeric representation,
|
|
286
288
|
of a value kept as all caps (ie. ONE_VALUE).
|
287
289
|
"""
|
288
290
|
type __EnumValue {
|
289
|
-
|
291
|
+
deprecationReason: String
|
290
292
|
|
291
293
|
description: String
|
292
294
|
|
293
295
|
isDeprecated: Boolean!
|
294
296
|
|
295
|
-
|
297
|
+
name: String!
|
296
298
|
}
|
297
299
|
|
298
300
|
"""
|
@@ -302,34 +304,33 @@ a value of a specific type.
|
|
302
304
|
"""
|
303
305
|
# Assigned to Rails::GraphQL::Field class
|
304
306
|
type __Field {
|
305
|
-
name: String!
|
306
|
-
|
307
|
-
description: String
|
308
|
-
|
309
307
|
args: [__InputValue!]!
|
310
308
|
|
311
|
-
|
309
|
+
deprecationReason: String
|
310
|
+
|
311
|
+
description: String
|
312
312
|
|
313
313
|
isDeprecated: Boolean!
|
314
314
|
|
315
|
-
|
315
|
+
name: String!
|
316
|
+
|
317
|
+
type: __Type!
|
316
318
|
}
|
317
319
|
|
318
320
|
"""
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
a single value.
|
321
|
+
Arguments provided to Fields or Directives and the input fields of an
|
322
|
+
InputObject are represented as Input Values which describe their type
|
323
|
+
and optionally a default value.
|
323
324
|
"""
|
324
325
|
# Assigned to Rails::GraphQL::Field::InputField class
|
325
326
|
type __InputValue {
|
326
|
-
|
327
|
+
defaultValue: String
|
327
328
|
|
328
329
|
description: String
|
329
330
|
|
330
|
-
|
331
|
+
name: String!
|
331
332
|
|
332
|
-
|
333
|
+
type: __Type!
|
333
334
|
}
|
334
335
|
|
335
336
|
"""
|
@@ -341,15 +342,15 @@ determines the place in the type system where those operations begin.
|
|
341
342
|
"""
|
342
343
|
# Assigned to Rails::GraphQL::Schema class
|
343
344
|
type __Schema {
|
344
|
-
|
345
|
-
|
346
|
-
queryType: __Type!
|
345
|
+
directives: [__Directive!]!
|
347
346
|
|
348
347
|
mutationType: __Type
|
349
348
|
|
349
|
+
queryType: __Type!
|
350
|
+
|
350
351
|
subscriptionType: __Type
|
351
352
|
|
352
|
-
|
353
|
+
types: [__Type!]!
|
353
354
|
}
|
354
355
|
|
355
356
|
"""
|
@@ -375,29 +376,31 @@ the schema to define exactly what data is expected.
|
|
375
376
|
"""
|
376
377
|
# Assigned to Rails::GraphQL::Type class
|
377
378
|
type __Type {
|
378
|
-
kind: __TypeKind!
|
379
|
-
|
380
|
-
name: String
|
381
|
-
|
382
379
|
description: String
|
383
380
|
|
381
|
+
"ENUM only"
|
382
|
+
enumValues(includeDeprecated: Boolean = false): [__EnumValue!]
|
383
|
+
|
384
384
|
"OBJECT and INTERFACE only"
|
385
385
|
fields(includeDeprecated: Boolean = false): [__Field!]
|
386
386
|
|
387
|
+
"INPUT_OBJECT only"
|
388
|
+
inputFields: [__InputValue!]
|
389
|
+
|
387
390
|
"OBJECT only"
|
388
391
|
interfaces: [__Type!]
|
389
392
|
|
390
|
-
|
391
|
-
possibleTypes: [__Type!]
|
392
|
-
|
393
|
-
"ENUM only"
|
394
|
-
enumValues(includeDeprecated: Boolean = false): [__EnumValue!]
|
393
|
+
kind: __TypeKind!
|
395
394
|
|
396
|
-
|
397
|
-
inputFields: [__InputValue!]
|
395
|
+
name: String
|
398
396
|
|
399
397
|
"NON_NULL and LIST only"
|
400
398
|
ofType: __Type
|
399
|
+
|
400
|
+
"INTERFACE and UNION only"
|
401
|
+
possibleTypes: [__Type!]
|
402
|
+
|
403
|
+
specifiedByURL: String
|
401
404
|
}
|
402
405
|
|
403
406
|
"""
|
@@ -430,3 +433,14 @@ directive @skip(
|
|
430
433
|
if: Boolean!
|
431
434
|
|
432
435
|
) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
|
436
|
+
|
437
|
+
"""
|
438
|
+
A built-in directive used within the type system definition language to provide
|
439
|
+
a scalar specification URL for specifying the behavior of custom scalar types.
|
440
|
+
"""
|
441
|
+
directive @specifiedBy(
|
442
|
+
|
443
|
+
"Point to a human-readable specification of the data format."
|
444
|
+
url: String!
|
445
|
+
|
446
|
+
) on SCALAR
|
data/test/assets/translate.gql
CHANGED
@@ -137,8 +137,9 @@ type ObjectDesc {
|
|
137
137
|
}
|
138
138
|
|
139
139
|
type _Query {
|
140
|
-
|
141
|
-
|
140
|
+
__schema: __Schema!
|
141
|
+
|
142
|
+
__type(name: String!): __Type
|
142
143
|
|
143
144
|
"A"
|
144
145
|
sampleA: String
|
@@ -149,18 +150,14 @@ type _Query {
|
|
149
150
|
"C"
|
150
151
|
sampleC: String
|
151
152
|
|
152
|
-
"D"
|
153
153
|
sampleD: String
|
154
154
|
|
155
155
|
"E"
|
156
156
|
sampleE: String
|
157
157
|
|
158
|
-
"F"
|
159
158
|
sampleF: String
|
160
159
|
|
161
|
-
|
162
|
-
|
163
|
-
__type(name: String!): __Type
|
160
|
+
sampleField: String
|
164
161
|
}
|
165
162
|
|
166
163
|
"""
|
@@ -174,13 +171,15 @@ additional information to the executor.
|
|
174
171
|
"""
|
175
172
|
# Assigned to Rails::GraphQL::Directive class
|
176
173
|
type __Directive {
|
177
|
-
|
174
|
+
args: [__InputValue!]!
|
178
175
|
|
179
176
|
description: String
|
180
177
|
|
178
|
+
isRepeatable: Boolean!
|
179
|
+
|
181
180
|
locations: [__DirectiveLocation!]!
|
182
181
|
|
183
|
-
|
182
|
+
name: String!
|
184
183
|
}
|
185
184
|
|
186
185
|
"""
|
@@ -189,13 +188,13 @@ of values. It's a string representation, not a numeric representation,
|
|
189
188
|
of a value kept as all caps (ie. ONE_VALUE).
|
190
189
|
"""
|
191
190
|
type __EnumValue {
|
192
|
-
|
191
|
+
deprecationReason: String
|
193
192
|
|
194
193
|
description: String
|
195
194
|
|
196
195
|
isDeprecated: Boolean!
|
197
196
|
|
198
|
-
|
197
|
+
name: String!
|
199
198
|
}
|
200
199
|
|
201
200
|
"""
|
@@ -205,34 +204,33 @@ a value of a specific type.
|
|
205
204
|
"""
|
206
205
|
# Assigned to Rails::GraphQL::Field class
|
207
206
|
type __Field {
|
208
|
-
name: String!
|
209
|
-
|
210
|
-
description: String
|
211
|
-
|
212
207
|
args: [__InputValue!]!
|
213
208
|
|
214
|
-
|
209
|
+
deprecationReason: String
|
210
|
+
|
211
|
+
description: String
|
215
212
|
|
216
213
|
isDeprecated: Boolean!
|
217
214
|
|
218
|
-
|
215
|
+
name: String!
|
216
|
+
|
217
|
+
type: __Type!
|
219
218
|
}
|
220
219
|
|
221
220
|
"""
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
a single value.
|
221
|
+
Arguments provided to Fields or Directives and the input fields of an
|
222
|
+
InputObject are represented as Input Values which describe their type
|
223
|
+
and optionally a default value.
|
226
224
|
"""
|
227
225
|
# Assigned to Rails::GraphQL::Field::InputField class
|
228
226
|
type __InputValue {
|
229
|
-
|
227
|
+
defaultValue: String
|
230
228
|
|
231
229
|
description: String
|
232
230
|
|
233
|
-
|
231
|
+
name: String!
|
234
232
|
|
235
|
-
|
233
|
+
type: __Type!
|
236
234
|
}
|
237
235
|
|
238
236
|
"""
|
@@ -244,15 +242,15 @@ determines the place in the type system where those operations begin.
|
|
244
242
|
"""
|
245
243
|
# Assigned to Rails::GraphQL::Schema class
|
246
244
|
type __Schema {
|
247
|
-
|
248
|
-
|
249
|
-
queryType: __Type!
|
245
|
+
directives: [__Directive!]!
|
250
246
|
|
251
247
|
mutationType: __Type
|
252
248
|
|
249
|
+
queryType: __Type!
|
250
|
+
|
253
251
|
subscriptionType: __Type
|
254
252
|
|
255
|
-
|
253
|
+
types: [__Type!]!
|
256
254
|
}
|
257
255
|
|
258
256
|
"""
|
@@ -278,29 +276,31 @@ the schema to define exactly what data is expected.
|
|
278
276
|
"""
|
279
277
|
# Assigned to Rails::GraphQL::Type class
|
280
278
|
type __Type {
|
281
|
-
kind: __TypeKind!
|
282
|
-
|
283
|
-
name: String
|
284
|
-
|
285
279
|
description: String
|
286
280
|
|
281
|
+
"ENUM only"
|
282
|
+
enumValues(includeDeprecated: Boolean = false): [__EnumValue!]
|
283
|
+
|
287
284
|
"OBJECT and INTERFACE only"
|
288
285
|
fields(includeDeprecated: Boolean = false): [__Field!]
|
289
286
|
|
287
|
+
"INPUT_OBJECT only"
|
288
|
+
inputFields: [__InputValue!]
|
289
|
+
|
290
290
|
"OBJECT only"
|
291
291
|
interfaces: [__Type!]
|
292
292
|
|
293
|
-
|
294
|
-
possibleTypes: [__Type!]
|
295
|
-
|
296
|
-
"ENUM only"
|
297
|
-
enumValues(includeDeprecated: Boolean = false): [__EnumValue!]
|
293
|
+
kind: __TypeKind!
|
298
294
|
|
299
|
-
|
300
|
-
inputFields: [__InputValue!]
|
295
|
+
name: String
|
301
296
|
|
302
297
|
"NON_NULL and LIST only"
|
303
298
|
ofType: __Type
|
299
|
+
|
300
|
+
"INTERFACE and UNION only"
|
301
|
+
possibleTypes: [__Type!]
|
302
|
+
|
303
|
+
specifiedByURL: String
|
304
304
|
}
|
305
305
|
|
306
306
|
"""
|
@@ -333,3 +333,14 @@ directive @skip(
|
|
333
333
|
if: Boolean!
|
334
334
|
|
335
335
|
) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
|
336
|
+
|
337
|
+
"""
|
338
|
+
A built-in directive used within the type system definition language to provide
|
339
|
+
a scalar specification URL for specifying the behavior of custom scalar types.
|
340
|
+
"""
|
341
|
+
directive @specifiedBy(
|
342
|
+
|
343
|
+
"Point to a human-readable specification of the data format."
|
344
|
+
url: String!
|
345
|
+
|
346
|
+
) on SCALAR
|
data/test/config.rb
CHANGED
@@ -17,10 +17,11 @@ require 'minitest/autorun'
|
|
17
17
|
require 'minitest/reporters'
|
18
18
|
require 'active_record'
|
19
19
|
require 'rails-graphql'
|
20
|
-
require '
|
20
|
+
require 'pry-byebug'
|
21
21
|
|
22
22
|
$config = Rails::GraphQL.config
|
23
23
|
$config.logger = ActiveSupport::TaggedLogging.new(Logger.new('/dev/null'))
|
24
|
+
$config.enable_introspection = true
|
24
25
|
Rails::GraphQL::Request::Backtrace.skip_base_class = NilClass
|
25
26
|
|
26
27
|
# ActiveRecord::Base.logger = Logger.new(STDOUT)
|
data/test/graphql/schema_test.rb
CHANGED
@@ -4,8 +4,8 @@ class GraphQL_SchemaTest < GraphQL::TestCase
|
|
4
4
|
DESCRIBED_CLASS = unmapped_class(Rails::GraphQL::Schema)
|
5
5
|
|
6
6
|
def test_gql_name
|
7
|
-
assert_equal('
|
8
|
-
assert_equal('
|
7
|
+
assert_equal('__Schema', DESCRIBED_CLASS.gql_name)
|
8
|
+
assert_equal('__Schema', DESCRIBED_CLASS.graphql_name)
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_kind
|
@@ -120,29 +120,6 @@ class GraphQL_SchemaTest < GraphQL::TestCase
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
-
def test_create_type
|
124
|
-
DESCRIBED_CLASS.stub(:create_klass, passallthrough) do
|
125
|
-
other = double(Module.new, base_type: double(name: 'A::Sample'))
|
126
|
-
result = [:some, other, type_const, { suffix: 'Sample' }]
|
127
|
-
assert_equal(result, DESCRIBED_CLASS.send(:create_type, :some, other))
|
128
|
-
|
129
|
-
result = [:some, type_const::Scalar, type_const, { suffix: 'Scalar' }]
|
130
|
-
assert_equal(result, DESCRIBED_CLASS.send(:create_type, :some, :Scalar))
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
def test_source
|
135
|
-
DESCRIBED_CLASS.stub(:create_klass, passallthrough) do
|
136
|
-
result = [:some, 1, source_const, { suffix: 'Source' }]
|
137
|
-
assert_equal(result, DESCRIBED_CLASS.send(:source, :some, 1))
|
138
|
-
|
139
|
-
source_const.stub(:find_for!, 2) do
|
140
|
-
result = [:some, 2, source_const, { suffix: 'Source' }]
|
141
|
-
assert_equal(result, DESCRIBED_CLASS.send(:source, :some))
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
123
|
def test_sources
|
147
124
|
result, passthrough = collect_all_through
|
148
125
|
xargs = { build: true }
|
@@ -160,12 +137,6 @@ class GraphQL_SchemaTest < GraphQL::TestCase
|
|
160
137
|
end
|
161
138
|
end
|
162
139
|
|
163
|
-
def test_create_klass
|
164
|
-
skip 'Needs branching testing'
|
165
|
-
new_klass = DESCRIBED_CLASS.send :create_klass, 'Test', unmapped_class(type_const::Enum)
|
166
|
-
assert(new_klass < type_const::Enum)
|
167
|
-
end
|
168
|
-
|
169
140
|
protected
|
170
141
|
|
171
142
|
def type_const
|
data/test/graphql/source_test.rb
CHANGED
@@ -25,7 +25,7 @@ class GraphQL_SourceTest < GraphQL::TestCase
|
|
25
25
|
|
26
26
|
def test_base_name
|
27
27
|
described_class.stub(:abstract?, false) do
|
28
|
-
assert_equal('
|
28
|
+
assert_equal('DESCRIBED_CLASS', described_class.base_name)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -144,16 +144,6 @@ class GraphQL_SourceTest < GraphQL::TestCase
|
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
147
|
-
def test_gql_module
|
148
|
-
assert_equal(::GraphQL, described_class.send(:gql_module))
|
149
|
-
|
150
|
-
::GraphQL.stub_const(:Other, Module.new) do
|
151
|
-
sample = unmapped_class(source_const)
|
152
|
-
::GraphQL::Other.const_set(:Source, sample)
|
153
|
-
assert_equal(::GraphQL::Other, sample.send(:gql_module))
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
147
|
def test_build_bang
|
158
148
|
skip
|
159
149
|
end
|
@@ -31,20 +31,23 @@ class GraphQL_Type_InterfaceTest < GraphQL::TestCase
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def test_implemented
|
34
|
+
skip 'Needs better double of interface'
|
34
35
|
DESCRIBED_CLASS.stub(:gql_name, 'test') do
|
35
36
|
DESCRIBED_CLASS.stub(:fields, {}) do
|
36
|
-
object = double(gql_name: 'baz',
|
37
|
+
object = double(gql_name: 'baz', has_field?: ->(*) { false }, proxy_field: -> {})
|
37
38
|
assert_equal(Set[object], implemented_types(object))
|
38
39
|
end
|
39
40
|
|
40
|
-
|
41
|
-
|
41
|
+
field = double(name: 'a', :"=~" => ->(*) { true })
|
42
|
+
DESCRIBED_CLASS.stub(:fields, { 'a' => field }) do
|
43
|
+
object = double(gql_name: 'baz', has_field?: ->(*) { true }, fields: { 'a' => field })
|
42
44
|
assert_equal(Set[object], implemented_types(object))
|
43
45
|
end
|
44
46
|
|
45
|
-
|
47
|
+
field = double(name: 'a', :"=~" => ->(*) { false })
|
48
|
+
fields = { 'a' => field }
|
46
49
|
DESCRIBED_CLASS.stub(:fields, fields) do
|
47
|
-
object = double(gql_name: 'baz',
|
50
|
+
object = double(gql_name: 'baz', has_field?: ->(*) { true }, fields: { 'a' => field })
|
48
51
|
assert_raises(StandardError) { DESCRIBED_CLASS.implemented(object) }
|
49
52
|
end
|
50
53
|
end
|
@@ -5,14 +5,17 @@ class GraphQL_Type_ObjectTest < GraphQL::TestCase
|
|
5
5
|
|
6
6
|
def test_valid_member_ask
|
7
7
|
fields = {
|
8
|
-
name: double(method_name: :name),
|
9
|
-
age: double(method_name: :age),
|
8
|
+
name: double(method_name: :name, null?: true, gql_name: 'n'),
|
9
|
+
age: double(method_name: :age, null?: false, gql_name: 'a'),
|
10
10
|
}
|
11
11
|
|
12
12
|
DESCRIBED_CLASS.stub(:fields, fields) do
|
13
13
|
value = { name: '' }
|
14
14
|
refute(DESCRIBED_CLASS.valid_member?(value))
|
15
15
|
|
16
|
+
value = { age: 0 }
|
17
|
+
assert(DESCRIBED_CLASS.valid_member?(value))
|
18
|
+
|
16
19
|
value = { name: '', age: 0 }
|
17
20
|
assert(DESCRIBED_CLASS.valid_member?(value))
|
18
21
|
|
@@ -20,6 +23,9 @@ class GraphQL_Type_ObjectTest < GraphQL::TestCase
|
|
20
23
|
assert(DESCRIBED_CLASS.valid_member?(value))
|
21
24
|
|
22
25
|
value = { 'name' => '', 'age' => 0 }
|
26
|
+
refute(DESCRIBED_CLASS.valid_member?(value))
|
27
|
+
|
28
|
+
value = { 'n' => '', 'a' => 0 }
|
23
29
|
assert(DESCRIBED_CLASS.valid_member?(value))
|
24
30
|
|
25
31
|
value = double(name: '', age: 0)
|