graphql 1.9.4 → 1.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +5 -5
  2. data/lib/graphql/execution/execute.rb +3 -0
  3. data/lib/graphql/execution/interpreter/runtime.rb +2 -2
  4. data/lib/graphql/execution/lookahead.rb +57 -22
  5. data/lib/graphql/introspection/input_value_type.rb +5 -1
  6. data/lib/graphql/language/parser.rb +57 -54
  7. data/lib/graphql/language/parser.y +12 -9
  8. data/lib/graphql/language/token.rb +1 -1
  9. data/lib/graphql/language/visitor.rb +1 -1
  10. data/lib/graphql/query/arguments.rb +3 -3
  11. data/lib/graphql/query/context.rb +6 -6
  12. data/lib/graphql/query/variable_validation_error.rb +14 -0
  13. data/lib/graphql/schema.rb +2 -2
  14. data/lib/graphql/schema/argument.rb +1 -1
  15. data/lib/graphql/schema/field.rb +6 -3
  16. data/lib/graphql/schema/object.rb +2 -2
  17. data/lib/graphql/schema/relay_classic_mutation.rb +1 -1
  18. data/lib/graphql/schema/rescue_middleware.rb +7 -2
  19. data/lib/graphql/schema/validation.rb +9 -4
  20. data/lib/graphql/static_validation/base_visitor.rb +8 -5
  21. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +3 -1
  22. data/lib/graphql/tracing.rb +3 -3
  23. data/lib/graphql/types.rb +1 -0
  24. data/lib/graphql/types/json.rb +25 -0
  25. data/lib/graphql/types/relay/base_edge.rb +3 -2
  26. data/lib/graphql/unauthorized_field_error.rb +1 -1
  27. data/lib/graphql/version.rb +1 -1
  28. data/spec/dummy/Gemfile.lock +157 -0
  29. data/spec/dummy/log/test.log +199 -0
  30. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4w/4wzXRZrAkwKdgYaSE0pid5eB-fer8vSfSku_NPg4rMA.cache +0 -0
  31. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7I/7IHVBiJT06QSpgLpLoJIxboQ0B-D_tMTxsvoezBTV3Q.cache +1 -0
  32. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8w/8wY_SKagj8wHuwGNAAf6JnQ8joMbC6cEYpHrTAI8Urc.cache +1 -0
  33. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/AK/AKzz1u6bGb4auXcrObA_g5LL-oV0ejNGa448AgAi_WQ.cache +1 -0
  34. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ET/ETW4uxvaYpruL8y6_ZptUH82ZowMaHIqvg5WexBFdEM.cache +3 -0
  35. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F1/F1TWpjjyA56k9Z90n5B3xRn7DUdGjX73QCkYC6k07JQ.cache +0 -0
  36. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F8/F8MUNRzORGFgr329fNM0xLaoWCXdv3BIalT7dsvLfjs.cache +2 -0
  37. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KB/KB07ZaKNC5uXJ7TjLi-WqnY6g7dq8wWp_8N3HNjBNxg.cache +2 -0
  38. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ms/MsKSimH_UCB-H1tLvDABDHuvGciuoW6kVqQWDrXU5FQ.cache +0 -0
  39. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Mt/Mtci-Kim50aPOmeClD4AIicKn1d1WJ0n454IjSd94sk.cache +0 -0
  40. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QH/QHt3Tc1Y6M66Oo_pDuMyWrQNs4Pp3SMeZR5K1wJj2Ts.cache +1 -0
  41. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XU/XU4k1OXnfMils5SrirorPvDSyDSqiOWLZNtmAH1HH8k.cache +0 -0
  42. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZI/ZIof7mZxWWCnraIFOCuV6a8QRWzKJXJnx2Xd7C0ZyX0.cache +1 -0
  43. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/cG/cGc_puuPS5pZKgUcy1Y_i1L6jl5UtsiIrMH59rTzR6c.cache +3 -0
  44. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/df/dfro_B6bx3KP1Go-7jEOqqZ2j4hVRseXIc3es9PKQno.cache +1 -0
  45. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jO/jO1DfbqnG0mTULsjJJANc3fefrG2zt7DIMmcptMT628.cache +1 -0
  46. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pE/pE7gO6pQ-z187Swb4hT554wmqsq-cNzgPWLrCz-LQQQ.cache +0 -0
  47. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r9/r9iU1l58a6rxkZSW5RSC52_tD-_UQuHxoMVnkfJ7Mhs.cache +1 -0
  48. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xi/xitPPFfPIyDMpaznV0sBBcw8eSCV8PJcLLWin78sCgE.cache +0 -0
  49. data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
  50. data/spec/graphql/authorization_spec.rb +47 -14
  51. data/spec/graphql/execution/lookahead_spec.rb +29 -2
  52. data/spec/graphql/function_spec.rb +28 -5
  53. data/spec/graphql/introspection/input_value_type_spec.rb +40 -1
  54. data/spec/graphql/language/parser_spec.rb +8 -0
  55. data/spec/graphql/query/executor_spec.rb +30 -3
  56. data/spec/graphql/schema/object_spec.rb +71 -0
  57. data/spec/graphql/schema/relay_classic_mutation_spec.rb +18 -0
  58. data/spec/graphql/schema/rescue_middleware_spec.rb +14 -0
  59. data/spec/graphql/schema/warden_spec.rb +1 -1
  60. data/spec/graphql/types/relay/base_edge_spec.rb +33 -0
  61. data/spec/integration/rails/graphql/schema_spec.rb +13 -0
  62. data/spec/integration/tmp/app/graphql/types/bird_type.rb +7 -0
  63. data/spec/support/dummy/schema.rb +19 -0
  64. data/spec/support/jazz.rb +16 -14
  65. metadata +57 -7
@@ -63,7 +63,46 @@ describe GraphQL::Introspection::InputValueType do
63
63
  field = cheese_type['data']['__type']['fields'].detect { |f| f['name'] == 'similarCheese' }
64
64
  arg = field['args'].detect { |a| a['name'] == 'nullableSource' }
65
65
 
66
- assert_equal('["COW"]', arg['defaultValue'])
66
+ assert_equal('[COW]', arg['defaultValue'])
67
+ end
68
+
69
+ it "supports list of enum default values" do
70
+ schema = GraphQL::Schema.from_definition(%|
71
+ type Query {
72
+ hello(enums: [MyEnum] = [A, B]): String
73
+ }
74
+
75
+ enum MyEnum {
76
+ A
77
+ B
78
+ }
79
+ |)
80
+
81
+ result = schema.execute(%|
82
+ {
83
+ __type(name: "Query") {
84
+ fields {
85
+ args {
86
+ defaultValue
87
+ }
88
+ }
89
+ }
90
+ }
91
+ |)
92
+
93
+ expected = {
94
+ "data" => {
95
+ "__type" => {
96
+ "fields" => [{
97
+ "args" => [{
98
+ "defaultValue" => "[A, B]"
99
+ }]
100
+ }]
101
+ }
102
+ }
103
+ }
104
+
105
+ assert_equal expected, result
67
106
  end
68
107
 
69
108
  it "supports null default values" do
@@ -129,6 +129,14 @@ describe GraphQL::Language::Parser do
129
129
  assert_equal schema_string, document.to_query_string
130
130
  end
131
131
 
132
+ describe "parse errors" do
133
+ it "raises parse errors for nil" do
134
+ assert_raises(GraphQL::ParseError) {
135
+ GraphQL.parse(nil)
136
+ }
137
+ end
138
+ end
139
+
132
140
  describe ".parse_file" do
133
141
  it "assigns filename to all nodes" do
134
142
  example_filename = "spec/support/parser/filename_example.graphql"
@@ -198,6 +198,32 @@ describe GraphQL::Query::Executor do
198
198
  schema.remove_handler(RuntimeError)
199
199
  end
200
200
 
201
+ it "adds to the errors key" do
202
+ expected = {
203
+ "data" => {"error" => nil},
204
+ "errors"=>[
205
+ {
206
+ "message"=>"Error was handled!",
207
+ "locations" => [{"line"=>1, "column"=>17}],
208
+ "path"=>["error"]
209
+ }
210
+ ]
211
+ }
212
+ assert_equal(expected, result)
213
+ end
214
+ end
215
+
216
+ describe "if the schema has a rescue handler with an instance of GraphQL::ExecutionError as an argument" do
217
+ before do
218
+ # HACK: reach to the underlying instance to perform a side-effect
219
+ schema.graphql_definition.rescue_from(RuntimeError) { GraphQL::ExecutionError.new("Error was handled!", extensions: { code: "DUMMY_ERROR" }) }
220
+ end
221
+
222
+ after do
223
+ # remove the handler from the middleware:
224
+ schema.remove_handler(RuntimeError)
225
+ end
226
+
201
227
  it "adds to the errors key" do
202
228
  expected = {
203
229
  "data" => {"error" => nil},
@@ -205,7 +231,8 @@ describe GraphQL::Query::Executor do
205
231
  {
206
232
  "message"=>"Error was handled!",
207
233
  "locations" => [{"line"=>1, "column"=>17}],
208
- "path"=>["error"]
234
+ "path"=>["error"],
235
+ "extensions"=>{code: "DUMMY_ERROR"}
209
236
  }
210
237
  ]
211
238
  }
@@ -275,7 +302,7 @@ describe GraphQL::Query::Executor do
275
302
  expected = {
276
303
  "errors"=>[
277
304
  {
278
- "message" => "Variable input of type ReplaceValuesInput! was provided invalid value",
305
+ "message" => "Variable input of type ReplaceValuesInput! was provided invalid value for values (Expected value to not be null)",
279
306
  "locations" => [{ "line" => 1, "column" => 13 }],
280
307
  "extensions" => {
281
308
  "value" => {},
@@ -295,7 +322,7 @@ describe GraphQL::Query::Executor do
295
322
  expected = {
296
323
  "errors"=>[
297
324
  {
298
- "message" => "Variable input of type [DairyProductInput] was provided invalid value",
325
+ "message" => "Variable input of type [DairyProductInput] was provided invalid value for 0.foo (Field is not defined on DairyProductInput), 0.source (Expected value to not be null)",
299
326
  "locations" => [{ "line" => 1, "column" => 10 }],
300
327
  "extensions" => {
301
328
  "value" => [{ "foo" => "bar" }],
@@ -105,6 +105,77 @@ describe GraphQL::Schema::Object do
105
105
  end
106
106
  end
107
107
 
108
+ describe "using GraphQL::Function" do
109
+ new_test_func_payload = Class.new(GraphQL::Schema::Object) do
110
+ graphql_name "TestFuncPayload"
111
+ field :name, String, null: false
112
+ end
113
+
114
+ it "returns data on a field" do
115
+ new_func_class = Class.new(GraphQL::Function) do
116
+ argument :name, GraphQL::STRING_TYPE
117
+ type new_test_func_payload
118
+
119
+ def call(o, a, c)
120
+ { name: a[:name] }
121
+ end
122
+ end
123
+
124
+ new_object_class = Class.new(GraphQL::Schema::Object) do
125
+ graphql_name "GraphQL"
126
+ field :test, function: new_func_class.new
127
+ end
128
+
129
+ schema = Class.new(GraphQL::Schema) do
130
+ query(new_object_class)
131
+ end
132
+
133
+ query_str = <<-GRAPHQL
134
+ {
135
+ test(name: "graphql") {
136
+ name
137
+ }
138
+ }
139
+ GRAPHQL
140
+ res = schema.execute(query_str)
141
+ assert_equal "graphql", res["data"]["test"]["name"]
142
+ end
143
+
144
+ it "returns data on a connection" do
145
+ new_func_class = Class.new(GraphQL::Function) do
146
+ argument :name, GraphQL::STRING_TYPE
147
+ type new_test_func_payload.connection_type
148
+
149
+ def call(o, a, c)
150
+ [{ name: a[:name] }]
151
+ end
152
+ end
153
+
154
+ new_object_class = Class.new(GraphQL::Schema::Object) do
155
+ graphql_name "GraphQL"
156
+ field :test_conn, function: new_func_class.new
157
+ end
158
+
159
+ schema = Class.new(GraphQL::Schema) do
160
+ query(new_object_class)
161
+ end
162
+
163
+ query_str = <<-GRAPHQL
164
+ {
165
+ testConn(name: "graphql") {
166
+ edges {
167
+ node {
168
+ name
169
+ }
170
+ }
171
+ }
172
+ }
173
+ GRAPHQL
174
+ res = schema.execute(query_str)
175
+ assert_equal "graphql", res["data"]["testConn"]["edges"][0]["node"]["name"]
176
+ end
177
+ end
178
+
108
179
  describe "wrapping a Hash" do
109
180
  it "automatically looks up symbol and string keys" do
110
181
  query_str = <<-GRAPHQL
@@ -37,6 +37,10 @@ describe GraphQL::Schema::RelayClassicMutation do
37
37
  end
38
38
 
39
39
  describe "execution" do
40
+ after do
41
+ Jazz::Models.reset
42
+ end
43
+
40
44
  it "works with no arguments" do
41
45
  res = Jazz::Schema.execute <<-GRAPHQL
42
46
  mutation {
@@ -51,6 +55,20 @@ describe GraphQL::Schema::RelayClassicMutation do
51
55
  assert_equal "Sitar", res["data"]["addSitar"]["instrument"]["name"]
52
56
  end
53
57
 
58
+ it "works with InputObject arguments" do
59
+ res = Jazz::Schema.execute <<-GRAPHQL
60
+ mutation {
61
+ addEnsembleRelay(input: { ensemble: { name: "Miles Davis Quartet" } }) {
62
+ ensemble {
63
+ name
64
+ }
65
+ }
66
+ }
67
+ GRAPHQL
68
+
69
+ assert_equal "Miles Davis Quartet", res["data"]["addEnsembleRelay"]["ensemble"]["name"]
70
+ end
71
+
54
72
  it "supports extras" do
55
73
  res = Jazz::Schema.execute <<-GRAPHQL
56
74
  mutation {
@@ -49,6 +49,20 @@ describe GraphQL::Schema::RescueMiddleware do
49
49
  assert_equal("there was an example error: SecondSpecExampleError", result.message)
50
50
  end
51
51
  end
52
+
53
+ describe "with GraphQL::ExecutionError as an argument" do
54
+ let(:rescue_middleware) do
55
+ middleware = GraphQL::Schema::RescueMiddleware.new
56
+ middleware.rescue_from(SpecExampleError) { |err| GraphQL::ExecutionError.new("there was an example error: #{err.class.name}", extensions: { code: "EXAMPLE_ERROR" }) }
57
+ middleware
58
+ end
59
+
60
+ it "has the extensions key" do
61
+ result = middleware_chain.invoke([])
62
+ assert_equal("there was an example error: SpecExampleError", result.message)
63
+ assert_equal({ code: "EXAMPLE_ERROR" }, result.extensions)
64
+ end
65
+ end
52
66
  end
53
67
 
54
68
  describe "unknown errors" do
@@ -817,7 +817,7 @@ describe GraphQL::Schema::Warden do
817
817
  res = MaskHelpers.query_with_mask(query_string, mask, variables: { "manners" => ["STOP", "TRILL"] })
818
818
  # It's not a good error message ... but it's something!
819
819
  expected_errors = [
820
- "Variable manners of type [Manner!]! was provided invalid value",
820
+ "Variable manners of type [Manner!]! was provided invalid value for 1 (Expected \"TRILL\" to be one of: STOP, AFFRICATE, FRICATIVE, APPROXIMANT, VOWEL)",
821
821
  ]
822
822
  assert_equal expected_errors, error_messages(res)
823
823
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe GraphQL::Types::Relay::BaseEdge do
5
+ module NonNullableDummy
6
+ class NonNullableNode < GraphQL::Schema::Object; end
7
+
8
+ class NonNullableNodeEdgeType < GraphQL::Types::Relay::BaseEdge
9
+ node_type(NonNullableNode, null: false)
10
+ end
11
+
12
+ class NonNullableNodeEdgeConnectionType < GraphQL::Types::Relay::BaseConnection
13
+ edge_type(NonNullableNodeEdgeType, nodes_field: false)
14
+ end
15
+
16
+ class Query < GraphQL::Schema::Object
17
+ field :connection, NonNullableNodeEdgeConnectionType, null: false
18
+ end
19
+
20
+ class Schema < GraphQL::Schema
21
+ query Query
22
+ end
23
+ end
24
+
25
+ it "runs the introspection query and the result contains a edge field that has non-nullable node" do
26
+ res = NonNullableDummy::Schema.execute(GraphQL::Introspection::INTROSPECTION_QUERY)
27
+ assert res
28
+ edge_type = res["data"]["__schema"]["types"].find { |t| t["name"] == "NonNullableNodeEdge" }
29
+ node_field = edge_type["fields"].find { |f| f["name"] == "node" }
30
+ assert_equal "NON_NULL", node_field["type"]["kind"]
31
+ assert_equal "NonNullableNode", node_field["type"]["ofType"]["name"]
32
+ end
33
+ end
@@ -3,6 +3,7 @@ require "spec_helper"
3
3
 
4
4
  describe GraphQL::Schema do
5
5
  let(:schema) { Dummy::Schema }
6
+ let(:admin_schema) { Dummy::AdminSchema }
6
7
  let(:relay_schema) { StarWars::Schema }
7
8
  let(:empty_schema) { GraphQL::Schema.define }
8
9
 
@@ -433,6 +434,18 @@ type Query {
433
434
  errors = schema.validate("fragment on Cheese { id }", rules: custom_rules)
434
435
  assert_equal([], errors)
435
436
  end
437
+
438
+ it "accepts a context hash" do
439
+ context = { admin: false }
440
+ # AdminSchema is a barebones dummy schema, where fields are visible only with context[:admin] == true
441
+ errors = admin_schema.validate('query { adminOnlyMessage }', context: context)
442
+ assert_equal 1, errors.length
443
+ assert_equal("Field 'adminOnlyMessage' doesn't exist on type 'AdminDairyAppQuery'", errors.first.message)
444
+
445
+ context = { admin: true }
446
+ errors = admin_schema.validate('query { adminOnlyMessage }', context: context)
447
+ assert_equal([], errors)
448
+ end
436
449
  end
437
450
 
438
451
  describe "#as_json / #to_json" do
@@ -0,0 +1,7 @@
1
+ module Types
2
+ module BirdType
3
+ include Types::BaseInterface
4
+ field :wingspan, Integer, null: false
5
+ field :foliage, [Types::ColorType], null: true
6
+ end
7
+ end
@@ -11,6 +11,12 @@ module Dummy
11
11
  accepts_definition :joins
12
12
  end
13
13
 
14
+ class AdminField < GraphQL::Schema::Field
15
+ def visible?(context)
16
+ context[:admin] == true
17
+ end
18
+ end
19
+
14
20
  module BaseInterface
15
21
  include GraphQL::Schema::Interface
16
22
  end
@@ -427,6 +433,15 @@ module Dummy
427
433
  def deep_non_null; :deep_non_null; end
428
434
  end
429
435
 
436
+ class AdminDairyAppQuery < BaseObject
437
+ field_class AdminField
438
+
439
+ field :admin_only_message, String, null: true
440
+ def admin_only_message
441
+ "This field is only visible to admin"
442
+ end
443
+ end
444
+
430
445
  GLOBAL_VALUES = []
431
446
 
432
447
  class ReplaceValuesInput < BaseInputObject
@@ -489,4 +504,8 @@ module Dummy
489
504
  use GraphQL::Execution::Interpreter
490
505
  end
491
506
  end
507
+
508
+ class AdminSchema < GraphQL::Schema
509
+ query AdminDairyAppQuery
510
+ end
492
511
  end
@@ -249,16 +249,6 @@ module Jazz
249
249
  end
250
250
  end
251
251
 
252
- class RawJson < GraphQL::Schema::Scalar
253
- def self.coerce_input(val, ctx)
254
- val
255
- end
256
-
257
- def self.coerce_result(val, ctx)
258
- val
259
- end
260
- end
261
-
262
252
  class Musician < BaseObject
263
253
  implements GloballyIdentifiableType
264
254
  implements NamedEntity
@@ -359,12 +349,12 @@ module Jazz
359
349
  field :inspect_context, [String], null: false
360
350
  field :hashyEnsemble, Ensemble, null: false
361
351
 
362
- field :echo_json, RawJson, null: false do
363
- argument :input, RawJson, required: true
352
+ field :echo_json, GraphQL::Types::JSON, null: false do
353
+ argument :input, GraphQL::Types::JSON, required: true
364
354
  end
365
355
 
366
- field :echo_first_json, RawJson, null: false do
367
- argument :input, [RawJson], required: true
356
+ field :echo_first_json, GraphQL::Types::JSON, null: false do
357
+ argument :input, [GraphQL::Types::JSON], required: true
368
358
  end
369
359
 
370
360
  field :upcase_check_1, String, null: true, resolver_method: :upcase_check, extras: [:upcase]
@@ -503,6 +493,17 @@ module Jazz
503
493
  end
504
494
  end
505
495
 
496
+ class AddEnsembleRelay < GraphQL::Schema::RelayClassicMutation
497
+ argument :ensemble, EnsembleInput, required: true
498
+ field :ensemble, Ensemble, null: false
499
+
500
+ def resolve(ensemble:)
501
+ ens = Models::Ensemble.new(ensemble.name)
502
+ Models.data["Ensemble"] << ens
503
+ { ensemble: ens }
504
+ end
505
+ end
506
+
506
507
  class AddSitar < GraphQL::Schema::RelayClassicMutation
507
508
  null true
508
509
  description "Get Sitar to musical instrument"
@@ -633,6 +634,7 @@ module Jazz
633
634
  end
634
635
 
635
636
  field :add_instrument, mutation: AddInstrument
637
+ field :add_ensemble_relay, mutation: AddEnsembleRelay
636
638
  field :add_sitar, mutation: AddSitar
637
639
  field :rename_ensemble, mutation: RenameEnsemble
638
640
  field :rename_named_entity, mutation: RenameNamedEntity
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.9.4
4
+ version: 1.9.5
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-04-05 00:00:00.000000000 Z
11
+ date: 2019-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -210,16 +210,16 @@ dependencies:
210
210
  name: rubocop
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
- - - "~>"
213
+ - - '='
214
214
  - !ruby/object:Gem::Version
215
- version: '0.45'
215
+ version: '0.68'
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
- - - "~>"
220
+ - - '='
221
221
  - !ruby/object:Gem::Version
222
- version: '0.45'
222
+ version: '0.68'
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: appraisal
225
225
  requirement: !ruby/object:Gem::Requirement
@@ -679,6 +679,7 @@ files:
679
679
  - lib/graphql/types/id.rb
680
680
  - lib/graphql/types/int.rb
681
681
  - lib/graphql/types/iso_8601_date_time.rb
682
+ - lib/graphql/types/json.rb
682
683
  - lib/graphql/types/relay.rb
683
684
  - lib/graphql/types/relay/base_connection.rb
684
685
  - lib/graphql/types/relay/base_edge.rb
@@ -699,6 +700,7 @@ files:
699
700
  - lib/graphql/version.rb
700
701
  - readme.md
701
702
  - spec/dummy/Gemfile
703
+ - spec/dummy/Gemfile.lock
702
704
  - spec/dummy/README.md
703
705
  - spec/dummy/Rakefile
704
706
  - spec/dummy/app/assets/config/manifest.js
@@ -737,6 +739,7 @@ files:
737
739
  - spec/dummy/config/puma.rb
738
740
  - spec/dummy/config/routes.rb
739
741
  - spec/dummy/config/secrets.yml
742
+ - spec/dummy/log/test.log
740
743
  - spec/dummy/package.json
741
744
  - spec/dummy/public/404.html
742
745
  - spec/dummy/public/422.html
@@ -748,6 +751,26 @@ files:
748
751
  - spec/dummy/test/application_system_test_case.rb
749
752
  - spec/dummy/test/system/action_cable_subscription_test.rb
750
753
  - spec/dummy/test/test_helper.rb
754
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/4w/4wzXRZrAkwKdgYaSE0pid5eB-fer8vSfSku_NPg4rMA.cache
755
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/7I/7IHVBiJT06QSpgLpLoJIxboQ0B-D_tMTxsvoezBTV3Q.cache
756
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/8w/8wY_SKagj8wHuwGNAAf6JnQ8joMbC6cEYpHrTAI8Urc.cache
757
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/AK/AKzz1u6bGb4auXcrObA_g5LL-oV0ejNGa448AgAi_WQ.cache
758
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/ET/ETW4uxvaYpruL8y6_ZptUH82ZowMaHIqvg5WexBFdEM.cache
759
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/F1/F1TWpjjyA56k9Z90n5B3xRn7DUdGjX73QCkYC6k07JQ.cache
760
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/F8/F8MUNRzORGFgr329fNM0xLaoWCXdv3BIalT7dsvLfjs.cache
761
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/KB/KB07ZaKNC5uXJ7TjLi-WqnY6g7dq8wWp_8N3HNjBNxg.cache
762
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Ms/MsKSimH_UCB-H1tLvDABDHuvGciuoW6kVqQWDrXU5FQ.cache
763
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Mt/Mtci-Kim50aPOmeClD4AIicKn1d1WJ0n454IjSd94sk.cache
764
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/QH/QHt3Tc1Y6M66Oo_pDuMyWrQNs4Pp3SMeZR5K1wJj2Ts.cache
765
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/XU/XU4k1OXnfMils5SrirorPvDSyDSqiOWLZNtmAH1HH8k.cache
766
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/ZI/ZIof7mZxWWCnraIFOCuV6a8QRWzKJXJnx2Xd7C0ZyX0.cache
767
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/cG/cGc_puuPS5pZKgUcy1Y_i1L6jl5UtsiIrMH59rTzR6c.cache
768
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/df/dfro_B6bx3KP1Go-7jEOqqZ2j4hVRseXIc3es9PKQno.cache
769
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/jO/jO1DfbqnG0mTULsjJJANc3fefrG2zt7DIMmcptMT628.cache
770
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/pE/pE7gO6pQ-z187Swb4hT554wmqsq-cNzgPWLrCz-LQQQ.cache
771
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/r9/r9iU1l58a6rxkZSW5RSC52_tD-_UQuHxoMVnkfJ7Mhs.cache
772
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/xi/xitPPFfPIyDMpaznV0sBBcw8eSCV8PJcLLWin78sCgE.cache
773
+ - spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png
751
774
  - spec/fixtures/upgrader/account.original.rb
752
775
  - spec/fixtures/upgrader/account.transformed.rb
753
776
  - spec/fixtures/upgrader/blame_range.original.rb
@@ -918,6 +941,7 @@ files:
918
941
  - spec/graphql/tracing_spec.rb
919
942
  - spec/graphql/types/big_int_spec.rb
920
943
  - spec/graphql/types/iso_8601_date_time_spec.rb
944
+ - spec/graphql/types/relay/base_edge_spec.rb
921
945
  - spec/graphql/union_type_spec.rb
922
946
  - spec/graphql/upgrader/member_spec.rb
923
947
  - spec/graphql/upgrader/schema_spec.rb
@@ -951,6 +975,7 @@ files:
951
975
  - spec/integration/rails/graphql/schema_spec.rb
952
976
  - spec/integration/rails/graphql/tracing/active_support_notifications_tracing_spec.rb
953
977
  - spec/integration/rails/spec_helper.rb
978
+ - spec/integration/tmp/app/graphql/types/bird_type.rb
954
979
  - spec/spec_helper.rb
955
980
  - spec/support/dummy/data.rb
956
981
  - spec/support/dummy/schema.rb
@@ -991,7 +1016,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
991
1016
  - !ruby/object:Gem::Version
992
1017
  version: '0'
993
1018
  requirements: []
994
- rubygems_version: 3.0.2
1019
+ rubyforge_project:
1020
+ rubygems_version: 2.6.13
995
1021
  signing_key:
996
1022
  specification_version: 4
997
1023
  summary: A GraphQL language and runtime for Ruby
@@ -1047,10 +1073,33 @@ test_files:
1047
1073
  - spec/dummy/public/robots.txt
1048
1074
  - spec/dummy/package.json
1049
1075
  - spec/dummy/Gemfile
1076
+ - spec/dummy/log/test.log
1077
+ - spec/dummy/Gemfile.lock
1078
+ - spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png
1079
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/pE/pE7gO6pQ-z187Swb4hT554wmqsq-cNzgPWLrCz-LQQQ.cache
1080
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Ms/MsKSimH_UCB-H1tLvDABDHuvGciuoW6kVqQWDrXU5FQ.cache
1081
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Mt/Mtci-Kim50aPOmeClD4AIicKn1d1WJ0n454IjSd94sk.cache
1082
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/KB/KB07ZaKNC5uXJ7TjLi-WqnY6g7dq8wWp_8N3HNjBNxg.cache
1083
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/df/dfro_B6bx3KP1Go-7jEOqqZ2j4hVRseXIc3es9PKQno.cache
1084
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/AK/AKzz1u6bGb4auXcrObA_g5LL-oV0ejNGa448AgAi_WQ.cache
1085
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/cG/cGc_puuPS5pZKgUcy1Y_i1L6jl5UtsiIrMH59rTzR6c.cache
1086
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/jO/jO1DfbqnG0mTULsjJJANc3fefrG2zt7DIMmcptMT628.cache
1087
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/xi/xitPPFfPIyDMpaznV0sBBcw8eSCV8PJcLLWin78sCgE.cache
1088
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/r9/r9iU1l58a6rxkZSW5RSC52_tD-_UQuHxoMVnkfJ7Mhs.cache
1089
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/XU/XU4k1OXnfMils5SrirorPvDSyDSqiOWLZNtmAH1HH8k.cache
1090
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/QH/QHt3Tc1Y6M66Oo_pDuMyWrQNs4Pp3SMeZR5K1wJj2Ts.cache
1091
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/4w/4wzXRZrAkwKdgYaSE0pid5eB-fer8vSfSku_NPg4rMA.cache
1092
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/ZI/ZIof7mZxWWCnraIFOCuV6a8QRWzKJXJnx2Xd7C0ZyX0.cache
1093
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/ET/ETW4uxvaYpruL8y6_ZptUH82ZowMaHIqvg5WexBFdEM.cache
1094
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/F1/F1TWpjjyA56k9Z90n5B3xRn7DUdGjX73QCkYC6k07JQ.cache
1095
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/F8/F8MUNRzORGFgr329fNM0xLaoWCXdv3BIalT7dsvLfjs.cache
1096
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/7I/7IHVBiJT06QSpgLpLoJIxboQ0B-D_tMTxsvoezBTV3Q.cache
1097
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/8w/8wY_SKagj8wHuwGNAAf6JnQ8joMbC6cEYpHrTAI8Urc.cache
1050
1098
  - spec/integration/mongoid/spec_helper.rb
1051
1099
  - spec/integration/mongoid/star_trek/schema.rb
1052
1100
  - spec/integration/mongoid/star_trek/data.rb
1053
1101
  - spec/integration/mongoid/graphql/relay/mongo_relation_connection_spec.rb
1102
+ - spec/integration/tmp/app/graphql/types/bird_type.rb
1054
1103
  - spec/integration/rails/spec_helper.rb
1055
1104
  - spec/integration/rails/data.rb
1056
1105
  - spec/integration/rails/graphql/tracing/active_support_notifications_tracing_spec.rb
@@ -1107,6 +1156,7 @@ test_files:
1107
1156
  - spec/graphql/int_type_spec.rb
1108
1157
  - spec/graphql/types/iso_8601_date_time_spec.rb
1109
1158
  - spec/graphql/types/big_int_spec.rb
1159
+ - spec/graphql/types/relay/base_edge_spec.rb
1110
1160
  - spec/graphql/field_spec.rb
1111
1161
  - spec/graphql/analysis/max_query_depth_spec.rb
1112
1162
  - spec/graphql/analysis/max_query_complexity_spec.rb