graphql 1.7.4 → 1.7.5
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/generators/graphql/core.rb +13 -3
- data/lib/generators/graphql/enum_generator.rb +1 -1
- data/lib/generators/graphql/function_generator.rb +4 -1
- data/lib/generators/graphql/install_generator.rb +3 -3
- data/lib/generators/graphql/interface_generator.rb +1 -1
- data/lib/generators/graphql/loader_generator.rb +4 -1
- data/lib/generators/graphql/mutation_generator.rb +3 -3
- data/lib/generators/graphql/object_generator.rb +1 -1
- data/lib/generators/graphql/type_generator.rb +3 -0
- data/lib/generators/graphql/union_generator.rb +1 -1
- data/lib/graphql/backtrace/inspect_result.rb +1 -1
- data/lib/graphql/backtrace/table.rb +2 -2
- data/lib/graphql/backtrace/tracer.rb +7 -1
- data/lib/graphql/base_type.rb +10 -0
- data/lib/graphql/compatibility/query_parser_specification.rb +15 -0
- data/lib/graphql/execution/multiplex.rb +4 -0
- data/lib/graphql/language/parser.rb +595 -514
- data/lib/graphql/language/parser.y +21 -5
- data/lib/graphql/list_type.rb +4 -0
- data/lib/graphql/non_null_type.rb +5 -1
- data/lib/graphql/query.rb +3 -0
- data/lib/graphql/static_validation/all_rules.rb +1 -0
- data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +23 -0
- data/lib/graphql/subscriptions.rb +6 -0
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +2 -4
- data/lib/graphql/subscriptions/serialize.rb +36 -10
- data/lib/graphql/tracing/scout_tracing.rb +5 -3
- data/lib/graphql/version.rb +1 -1
- data/spec/dummy/Gemfile +4 -2
- data/spec/dummy/config/application.rb +0 -1
- data/spec/generators/graphql/install_generator_spec.rb +7 -0
- data/spec/generators/graphql/mutation_generator_spec.rb +25 -2
- data/spec/generators/graphql/union_generator_spec.rb +14 -0
- data/spec/graphql/backtrace_spec.rb +21 -1
- data/spec/graphql/base_type_spec.rb +42 -0
- data/spec/graphql/execution/multiplex_spec.rb +48 -0
- data/spec/graphql/field_spec.rb +14 -2
- data/spec/graphql/static_validation/rules/variable_names_are_unique_spec.rb +23 -0
- data/spec/graphql/subscriptions/serialize_spec.rb +53 -0
- data/spec/graphql/subscriptions_spec.rb +9 -2
- data/spec/graphql/tracing/scout_tracing_spec.rb +17 -0
- metadata +23 -2
@@ -132,4 +132,52 @@ describe GraphQL::Execution::Multiplex do
|
|
132
132
|
], checks
|
133
133
|
end
|
134
134
|
end
|
135
|
+
|
136
|
+
describe "after_query when errors are raised" do
|
137
|
+
class InspectQueryInstrumentation
|
138
|
+
class << self
|
139
|
+
attr_reader :last_json
|
140
|
+
def before_query(query)
|
141
|
+
end
|
142
|
+
|
143
|
+
def after_query(query)
|
144
|
+
@last_json = query.result.to_json
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
InspectQueryType = GraphQL::ObjectType.define do
|
150
|
+
name "Query"
|
151
|
+
|
152
|
+
field :raiseExecutionError, types.String do
|
153
|
+
resolve ->(object, args, ctx) {
|
154
|
+
raise GraphQL::ExecutionError, "Whoops"
|
155
|
+
}
|
156
|
+
end
|
157
|
+
|
158
|
+
field :raiseError, types.String do
|
159
|
+
resolve ->(object, args, ctx) {
|
160
|
+
raise GraphQL::Error, "Crash"
|
161
|
+
}
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
InspectSchema = GraphQL::Schema.define do
|
166
|
+
query InspectQueryType
|
167
|
+
instrument(:query, InspectQueryInstrumentation)
|
168
|
+
end
|
169
|
+
|
170
|
+
it "can access the query results" do
|
171
|
+
InspectSchema.execute("{ raiseExecutionError }")
|
172
|
+
handled_err_json = '{"data":{"raiseExecutionError":null},"errors":[{"message":"Whoops","locations":[{"line":1,"column":3}],"path":["raiseExecutionError"]}]}'
|
173
|
+
assert_equal handled_err_json, InspectQueryInstrumentation.last_json
|
174
|
+
|
175
|
+
|
176
|
+
assert_raises(GraphQL::Error) do
|
177
|
+
InspectSchema.execute("{ raiseError }")
|
178
|
+
end
|
179
|
+
unhandled_err_json = 'null'
|
180
|
+
assert_equal unhandled_err_json, InspectQueryInstrumentation.last_json
|
181
|
+
end
|
182
|
+
end
|
135
183
|
end
|
data/spec/graphql/field_spec.rb
CHANGED
@@ -225,10 +225,22 @@ describe GraphQL::Field do
|
|
225
225
|
|
226
226
|
describe "#resolve_proc" do
|
227
227
|
it "ensures the definition was called" do
|
228
|
-
|
228
|
+
class SimpleResolver
|
229
|
+
def self.call(*args)
|
230
|
+
:whatever
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
field_with_proc = GraphQL::Field.define do
|
229
235
|
resolve ->(o, a, c) { :whatever }
|
230
236
|
end
|
231
|
-
|
237
|
+
|
238
|
+
field_with_class = GraphQL::Field.define do
|
239
|
+
resolve SimpleResolver
|
240
|
+
end
|
241
|
+
|
242
|
+
assert_respond_to field_with_proc.resolve_proc, :call
|
243
|
+
assert_respond_to field_with_class.resolve_proc, :call
|
232
244
|
end
|
233
245
|
end
|
234
246
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe GraphQL::StaticValidation::VariableNamesAreUnique do
|
5
|
+
include StaticValidationHelpers
|
6
|
+
|
7
|
+
let(:query_string) { <<-GRAPHQL
|
8
|
+
query GetStuff($var1: Int!, $var2: Int!, $var1: Int!, $var2: Int!, $var3: Int!) {
|
9
|
+
c1: cheese(id: $var1) { flavor }
|
10
|
+
c2: cheese(id: $var2) { flavor }
|
11
|
+
c3: cheese(id: $var3) { flavor }
|
12
|
+
}
|
13
|
+
GRAPHQL
|
14
|
+
}
|
15
|
+
|
16
|
+
it "finds duplicate variable names" do
|
17
|
+
assert_equal 2, errors.size
|
18
|
+
|
19
|
+
last_err = errors.last
|
20
|
+
assert_equal 'There can only be one variable named "var2"', last_err["message"]
|
21
|
+
assert_equal 2, last_err["locations"].size
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
if defined?(GlobalID)
|
5
|
+
GlobalID.app = "graphql-ruby-test"
|
6
|
+
|
7
|
+
class GlobalIDUser
|
8
|
+
include GlobalID::Identification
|
9
|
+
|
10
|
+
attr_reader :id
|
11
|
+
|
12
|
+
def initialize(id)
|
13
|
+
@id = id
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.find(id)
|
17
|
+
GlobalIDUser.new(id)
|
18
|
+
end
|
19
|
+
|
20
|
+
def ==(that)
|
21
|
+
self.id == that.id
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe GraphQL::Subscriptions::Serialize do
|
27
|
+
if defined?(GlobalID)
|
28
|
+
it "should serialize GlobalID::Identification in Array/Hash" do
|
29
|
+
user_a = GlobalIDUser.new("a")
|
30
|
+
user_b = GlobalIDUser.new("b")
|
31
|
+
|
32
|
+
str_a = GraphQL::Subscriptions::Serialize.dump(["first", 2, user_a])
|
33
|
+
str_b = GraphQL::Subscriptions::Serialize.dump({first: 'first', second: 2, user: user_b})
|
34
|
+
|
35
|
+
assert_equal str_a, '["first",2,{"__gid__":"Z2lkOi8vZ3JhcGhxbC1ydWJ5LXRlc3QvR2xvYmFsSURVc2VyL2E"}]'
|
36
|
+
assert_equal str_b, '{"first":"first","second":2,"user":{"__gid__":"Z2lkOi8vZ3JhcGhxbC1ydWJ5LXRlc3QvR2xvYmFsSURVc2VyL2I"}}'
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should deserialize GlobalID::Identification in Array/Hash" do
|
40
|
+
user_a = GlobalIDUser.new("a")
|
41
|
+
user_b = GlobalIDUser.new("b")
|
42
|
+
|
43
|
+
str_a = '["first",2,{"__gid__":"Z2lkOi8vZ3JhcGhxbC1ydWJ5LXRlc3QvR2xvYmFsSURVc2VyL2E"}]'
|
44
|
+
str_b = '{"first":"first","second":2,"user":{"__gid__":"Z2lkOi8vZ3JhcGhxbC1ydWJ5LXRlc3QvR2xvYmFsSURVc2VyL2I"}}'
|
45
|
+
|
46
|
+
parsed_obj_a = GraphQL::Subscriptions::Serialize.load(str_a)
|
47
|
+
parsed_obj_b = GraphQL::Subscriptions::Serialize.load(str_b)
|
48
|
+
|
49
|
+
assert_equal parsed_obj_a, ["first", 2, user_a]
|
50
|
+
assert_equal parsed_obj_b, {'first' => 'first', 'second' => 2, 'user' => user_b}
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -133,7 +133,7 @@ class InMemoryBackend
|
|
133
133
|
Schema.get_field("Subscription", "myEvent").subscription_scope = :me
|
134
134
|
end
|
135
135
|
|
136
|
-
if
|
136
|
+
if defined?(GlobalID)
|
137
137
|
GlobalID.app = "graphql-ruby-test"
|
138
138
|
|
139
139
|
class GlobalIDUser
|
@@ -308,7 +308,7 @@ describe GraphQL::Subscriptions do
|
|
308
308
|
assert_equal [3], deliveries["3"].map { |d| d["data"]["myEvent"]["int"] }
|
309
309
|
end
|
310
310
|
|
311
|
-
if
|
311
|
+
if defined?(GlobalID)
|
312
312
|
it "allows complex object subscription scopes" do
|
313
313
|
query_str = <<-GRAPHQL
|
314
314
|
subscription($type: PayloadType) {
|
@@ -384,4 +384,11 @@ describe GraphQL::Subscriptions do
|
|
384
384
|
assert_equal 123, schema.subscriptions.extra
|
385
385
|
end
|
386
386
|
end
|
387
|
+
|
388
|
+
describe "#build_id" do
|
389
|
+
it "returns a unique ID string" do
|
390
|
+
assert_instance_of String, schema.subscriptions.build_id
|
391
|
+
refute_equal schema.subscriptions.build_id, schema.subscriptions.build_id
|
392
|
+
end
|
393
|
+
end
|
387
394
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe GraphQL::Tracing::ScoutTracing do
|
6
|
+
class ScoutApm
|
7
|
+
module Tracer
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "Initializing" do
|
12
|
+
it "should include the module only after initilization" do
|
13
|
+
refute GraphQL::Tracing::ScoutTracing.included_modules.include?(ScoutApm::Tracer)
|
14
|
+
assert GraphQL::Tracing::ScoutTracing.new.class.included_modules.include?(ScoutApm::Tracer)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
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.7.
|
4
|
+
version: 1.7.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: 2017-
|
11
|
+
date: 2017-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ips
|
@@ -276,6 +276,20 @@ dependencies:
|
|
276
276
|
- - ">="
|
277
277
|
- !ruby/object:Gem::Version
|
278
278
|
version: '0'
|
279
|
+
- !ruby/object:Gem::Dependency
|
280
|
+
name: algoliasearch-jekyll
|
281
|
+
requirement: !ruby/object:Gem::Requirement
|
282
|
+
requirements:
|
283
|
+
- - ">="
|
284
|
+
- !ruby/object:Gem::Version
|
285
|
+
version: '0'
|
286
|
+
type: :development
|
287
|
+
prerelease: false
|
288
|
+
version_requirements: !ruby/object:Gem::Requirement
|
289
|
+
requirements:
|
290
|
+
- - ">="
|
291
|
+
- !ruby/object:Gem::Version
|
292
|
+
version: '0'
|
279
293
|
description: A plain-Ruby implementation of GraphQL.
|
280
294
|
email:
|
281
295
|
- rdmosolgo@gmail.com
|
@@ -504,6 +518,7 @@ files:
|
|
504
518
|
- lib/graphql/static_validation/rules/subscription_root_exists.rb
|
505
519
|
- lib/graphql/static_validation/rules/unique_directives_per_location.rb
|
506
520
|
- lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb
|
521
|
+
- lib/graphql/static_validation/rules/variable_names_are_unique.rb
|
507
522
|
- lib/graphql/static_validation/rules/variable_usages_are_allowed.rb
|
508
523
|
- lib/graphql/static_validation/rules/variables_are_input_types.rb
|
509
524
|
- lib/graphql/static_validation/rules/variables_are_used_and_defined.rb
|
@@ -941,15 +956,18 @@ files:
|
|
941
956
|
- spec/graphql/static_validation/rules/subscription_root_exists_spec.rb
|
942
957
|
- spec/graphql/static_validation/rules/unique_directives_per_location_spec.rb
|
943
958
|
- spec/graphql/static_validation/rules/variable_default_values_are_correctly_typed_spec.rb
|
959
|
+
- spec/graphql/static_validation/rules/variable_names_are_unique_spec.rb
|
944
960
|
- spec/graphql/static_validation/rules/variable_usages_are_allowed_spec.rb
|
945
961
|
- spec/graphql/static_validation/rules/variables_are_input_types_spec.rb
|
946
962
|
- spec/graphql/static_validation/rules/variables_are_used_and_defined_spec.rb
|
947
963
|
- spec/graphql/static_validation/type_stack_spec.rb
|
948
964
|
- spec/graphql/static_validation/validator_spec.rb
|
949
965
|
- spec/graphql/string_type_spec.rb
|
966
|
+
- spec/graphql/subscriptions/serialize_spec.rb
|
950
967
|
- spec/graphql/subscriptions_spec.rb
|
951
968
|
- spec/graphql/tracing/active_support_notifications_tracing_spec.rb
|
952
969
|
- spec/graphql/tracing/platform_tracing_spec.rb
|
970
|
+
- spec/graphql/tracing/scout_tracing_spec.rb
|
953
971
|
- spec/graphql/tracing_spec.rb
|
954
972
|
- spec/graphql/union_type_spec.rb
|
955
973
|
- spec/rails_dependency_sanity_spec.rb
|
@@ -1403,15 +1421,18 @@ test_files:
|
|
1403
1421
|
- spec/graphql/static_validation/rules/subscription_root_exists_spec.rb
|
1404
1422
|
- spec/graphql/static_validation/rules/unique_directives_per_location_spec.rb
|
1405
1423
|
- spec/graphql/static_validation/rules/variable_default_values_are_correctly_typed_spec.rb
|
1424
|
+
- spec/graphql/static_validation/rules/variable_names_are_unique_spec.rb
|
1406
1425
|
- spec/graphql/static_validation/rules/variable_usages_are_allowed_spec.rb
|
1407
1426
|
- spec/graphql/static_validation/rules/variables_are_input_types_spec.rb
|
1408
1427
|
- spec/graphql/static_validation/rules/variables_are_used_and_defined_spec.rb
|
1409
1428
|
- spec/graphql/static_validation/type_stack_spec.rb
|
1410
1429
|
- spec/graphql/static_validation/validator_spec.rb
|
1411
1430
|
- spec/graphql/string_type_spec.rb
|
1431
|
+
- spec/graphql/subscriptions/serialize_spec.rb
|
1412
1432
|
- spec/graphql/subscriptions_spec.rb
|
1413
1433
|
- spec/graphql/tracing/active_support_notifications_tracing_spec.rb
|
1414
1434
|
- spec/graphql/tracing/platform_tracing_spec.rb
|
1435
|
+
- spec/graphql/tracing/scout_tracing_spec.rb
|
1415
1436
|
- spec/graphql/tracing_spec.rb
|
1416
1437
|
- spec/graphql/union_type_spec.rb
|
1417
1438
|
- spec/rails_dependency_sanity_spec.rb
|