graphql 1.8.1 → 1.8.2
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 +1 -1
- data/lib/generators/graphql/enum_generator.rb +3 -3
- data/lib/generators/graphql/install_generator.rb +12 -1
- data/lib/generators/graphql/mutation_generator.rb +4 -4
- data/lib/generators/graphql/templates/base_enum.erb +2 -0
- data/lib/generators/graphql/templates/base_input_object.erb +2 -0
- data/lib/generators/graphql/templates/base_interface.erb +3 -0
- data/lib/generators/graphql/templates/base_object.erb +2 -0
- data/lib/generators/graphql/templates/base_union.erb +2 -0
- data/lib/generators/graphql/templates/enum.erb +1 -2
- data/lib/generators/graphql/templates/interface.erb +2 -3
- data/lib/generators/graphql/templates/mutation.erb +4 -5
- data/lib/generators/graphql/templates/mutation_type.erb +6 -9
- data/lib/generators/graphql/templates/object.erb +2 -3
- data/lib/generators/graphql/templates/query_type.erb +6 -8
- data/lib/generators/graphql/templates/schema.erb +7 -7
- data/lib/generators/graphql/templates/union.erb +1 -2
- data/lib/generators/graphql/type_generator.rb +33 -18
- data/lib/generators/graphql/union_generator.rb +1 -1
- data/lib/graphql/execution/execute.rb +3 -0
- data/lib/graphql/schema.rb +1 -0
- data/lib/graphql/schema/input_object.rb +22 -1
- data/lib/graphql/schema/relay_classic_mutation.rb +6 -2
- data/lib/graphql/static_validation/all_rules.rb +1 -0
- data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +31 -0
- data/lib/graphql/subscriptions/instrumentation.rb +3 -0
- data/lib/graphql/version.rb +1 -1
- data/spec/generators/graphql/enum_generator_spec.rb +1 -2
- data/spec/generators/graphql/install_generator_spec.rb +23 -24
- data/spec/generators/graphql/interface_generator_spec.rb +5 -6
- data/spec/generators/graphql/mutation_generator_spec.rb +10 -27
- data/spec/generators/graphql/object_generator_spec.rb +7 -10
- data/spec/generators/graphql/union_generator_spec.rb +3 -6
- data/spec/graphql/execution/execute_spec.rb +97 -0
- data/spec/graphql/schema/input_object_spec.rb +32 -0
- data/spec/graphql/schema/relay_classic_mutation_spec.rb +16 -0
- data/spec/graphql/static_validation/rules/argument_names_are_unique_spec.rb +44 -0
- data/spec/graphql/subscriptions_spec.rb +21 -1
- data/spec/support/jazz.rb +15 -2
- metadata +10 -6
- data/lib/generators/graphql/function_generator.rb +0 -18
- data/lib/generators/graphql/templates/function.erb +0 -17
- data/spec/generators/graphql/function_generator_spec.rb +0 -59
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe GraphQL::StaticValidation::ArgumentNamesAreUnique do
|
5
|
+
include StaticValidationHelpers
|
6
|
+
|
7
|
+
describe "field arguments" do
|
8
|
+
let(:query_string) { <<-GRAPHQL
|
9
|
+
query GetStuff {
|
10
|
+
c1: cheese(id: 1, id: 2) { flavor }
|
11
|
+
c2: cheese(id: 2) { flavor }
|
12
|
+
}
|
13
|
+
GRAPHQL
|
14
|
+
}
|
15
|
+
|
16
|
+
it "finds duplicate names" do
|
17
|
+
assert_equal 1, errors.size
|
18
|
+
|
19
|
+
error = errors.first
|
20
|
+
assert_equal 'There can be only one argument named "id"', error["message"]
|
21
|
+
assert_equal [{ "line" => 2, "column" => 18}, { "line" => 2, "column" => 25 }], error["locations"]
|
22
|
+
assert_equal ["query GetStuff", "c1"], error["fields"]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "directive arguments" do
|
27
|
+
let(:query_string) { <<-GRAPHQL
|
28
|
+
query GetStuff {
|
29
|
+
c1: cheese(id: 1) @include(if: true, if: true) { flavor }
|
30
|
+
c2: cheese(id: 2) @include(if: true) { flavor }
|
31
|
+
}
|
32
|
+
GRAPHQL
|
33
|
+
}
|
34
|
+
|
35
|
+
it "finds duplicate names" do
|
36
|
+
assert_equal 1, errors.size
|
37
|
+
|
38
|
+
error = errors.first
|
39
|
+
assert_equal 'There can be only one argument named "if"', error["message"]
|
40
|
+
assert_equal [{ "line" => 2, "column" => 34}, { "line" => 2, "column" => 44 }], error["locations"]
|
41
|
+
assert_equal ["query GetStuff", "c1"], error["fields"]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -132,6 +132,10 @@ class ClassBasedInMemoryBackend < InMemoryBackend
|
|
132
132
|
def my_event(type: nil)
|
133
133
|
object
|
134
134
|
end
|
135
|
+
|
136
|
+
field :failed_event, Payload, null: false, resolve: ->(o, a, c) { raise GraphQL::ExecutionError.new("unauthorized") } do
|
137
|
+
argument :id, ID, required: true
|
138
|
+
end
|
135
139
|
end
|
136
140
|
|
137
141
|
class Query < GraphQL::Schema::Object
|
@@ -151,6 +155,7 @@ class FromDefinitionInMemoryBackend < InMemoryBackend
|
|
151
155
|
payload(id: ID!): Payload!
|
152
156
|
event(stream: StreamInput): Payload
|
153
157
|
myEvent(type: PayloadType): Payload
|
158
|
+
failedEvent(id: ID!): Payload!
|
154
159
|
}
|
155
160
|
|
156
161
|
type Payload {
|
@@ -180,6 +185,7 @@ class FromDefinitionInMemoryBackend < InMemoryBackend
|
|
180
185
|
"payload" => ->(o,a,c) { o },
|
181
186
|
"myEvent" => ->(o,a,c) { o },
|
182
187
|
"event" => ->(o,a,c) { o },
|
188
|
+
"failedEvent" => ->(o,a,c) { raise GraphQL::ExecutionError.new("unauthorized") },
|
183
189
|
},
|
184
190
|
}
|
185
191
|
Schema = GraphQL::Schema.from_definition(SchemaDefinition, default_resolve: Resolvers).redefine do
|
@@ -410,7 +416,21 @@ describe GraphQL::Subscriptions do
|
|
410
416
|
end
|
411
417
|
end
|
412
418
|
|
413
|
-
it "
|
419
|
+
it "avoid subscription on resolver error" do
|
420
|
+
res = schema.execute(<<-GRAPHQL, context: { socket: "1" }, variables: { "id" => "100" })
|
421
|
+
subscription ($id: ID!){
|
422
|
+
failedEvent(id: $id) { str, int }
|
423
|
+
}
|
424
|
+
GRAPHQL
|
425
|
+
|
426
|
+
assert_equal nil, res["data"]
|
427
|
+
assert_equal "unauthorized", res["errors"][0]["message"]
|
428
|
+
|
429
|
+
# this is to make sure nothing actually got subscribed.. but I don't have any idea better than checking its instance variable
|
430
|
+
assert_equal 0, schema.subscriptions.instance_variable_get(:@subscriptions).size
|
431
|
+
end
|
432
|
+
|
433
|
+
it "lets unhandled errors crash" do
|
414
434
|
query_str = <<-GRAPHQL
|
415
435
|
subscription($type: PayloadType) {
|
416
436
|
myEvent(type: $type) { int }
|
data/spec/support/jazz.rb
CHANGED
@@ -45,9 +45,9 @@ module Jazz
|
|
45
45
|
end
|
46
46
|
|
47
47
|
class BaseArgument < GraphQL::Schema::Argument
|
48
|
-
def initialize(
|
48
|
+
def initialize(*args, custom: nil, **kwargs)
|
49
49
|
@custom = custom
|
50
|
-
super(
|
50
|
+
super(*args, **kwargs)
|
51
51
|
end
|
52
52
|
|
53
53
|
def to_graphql
|
@@ -446,12 +446,25 @@ module Jazz
|
|
446
446
|
end
|
447
447
|
end
|
448
448
|
|
449
|
+
class AddSitar < GraphQL::Schema::RelayClassicMutation
|
450
|
+
null true
|
451
|
+
description "Get Sitar to musical instrument"
|
452
|
+
|
453
|
+
field :instrument, InstrumentType, null: false
|
454
|
+
|
455
|
+
def resolve
|
456
|
+
instrument = Models::Instrument.new("Sitar", :str)
|
457
|
+
{ instrument: instrument }
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
449
461
|
class Mutation < BaseObject
|
450
462
|
field :add_ensemble, Ensemble, null: false do
|
451
463
|
argument :input, EnsembleInput, required: true
|
452
464
|
end
|
453
465
|
|
454
466
|
field :add_instrument, mutation: AddInstrument
|
467
|
+
field :add_sitar, mutation: AddSitar
|
455
468
|
|
456
469
|
def add_ensemble(input:)
|
457
470
|
ens = Models::Ensemble.new(input.name)
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ips
|
@@ -315,14 +315,17 @@ files:
|
|
315
315
|
- MIT-LICENSE
|
316
316
|
- lib/generators/graphql/core.rb
|
317
317
|
- lib/generators/graphql/enum_generator.rb
|
318
|
-
- lib/generators/graphql/function_generator.rb
|
319
318
|
- lib/generators/graphql/install_generator.rb
|
320
319
|
- lib/generators/graphql/interface_generator.rb
|
321
320
|
- lib/generators/graphql/loader_generator.rb
|
322
321
|
- lib/generators/graphql/mutation_generator.rb
|
323
322
|
- lib/generators/graphql/object_generator.rb
|
323
|
+
- lib/generators/graphql/templates/base_enum.erb
|
324
|
+
- lib/generators/graphql/templates/base_input_object.erb
|
325
|
+
- lib/generators/graphql/templates/base_interface.erb
|
326
|
+
- lib/generators/graphql/templates/base_object.erb
|
327
|
+
- lib/generators/graphql/templates/base_union.erb
|
324
328
|
- lib/generators/graphql/templates/enum.erb
|
325
|
-
- lib/generators/graphql/templates/function.erb
|
326
329
|
- lib/generators/graphql/templates/graphql_controller.erb
|
327
330
|
- lib/generators/graphql/templates/interface.erb
|
328
331
|
- lib/generators/graphql/templates/loader.erb
|
@@ -540,6 +543,7 @@ files:
|
|
540
543
|
- lib/graphql/static_validation/literal_validator.rb
|
541
544
|
- lib/graphql/static_validation/message.rb
|
542
545
|
- lib/graphql/static_validation/rules/argument_literals_are_compatible.rb
|
546
|
+
- lib/graphql/static_validation/rules/argument_names_are_unique.rb
|
543
547
|
- lib/graphql/static_validation/rules/arguments_are_defined.rb
|
544
548
|
- lib/graphql/static_validation/rules/directives_are_defined.rb
|
545
549
|
- lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb
|
@@ -942,7 +946,6 @@ files:
|
|
942
946
|
- spec/fixtures/upgrader/type_x.original.rb
|
943
947
|
- spec/fixtures/upgrader/type_x.transformed.rb
|
944
948
|
- spec/generators/graphql/enum_generator_spec.rb
|
945
|
-
- spec/generators/graphql/function_generator_spec.rb
|
946
949
|
- spec/generators/graphql/install_generator_spec.rb
|
947
950
|
- spec/generators/graphql/interface_generator_spec.rb
|
948
951
|
- spec/generators/graphql/loader_generator_spec.rb
|
@@ -1056,6 +1059,7 @@ files:
|
|
1056
1059
|
- spec/graphql/schema/warden_spec.rb
|
1057
1060
|
- spec/graphql/schema_spec.rb
|
1058
1061
|
- spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb
|
1062
|
+
- spec/graphql/static_validation/rules/argument_names_are_unique_spec.rb
|
1059
1063
|
- spec/graphql/static_validation/rules/arguments_are_defined_spec.rb
|
1060
1064
|
- spec/graphql/static_validation/rules/directives_are_defined_spec.rb
|
1061
1065
|
- spec/graphql/static_validation/rules/directives_are_in_valid_locations_spec.rb
|
@@ -1489,7 +1493,6 @@ test_files:
|
|
1489
1493
|
- spec/fixtures/upgrader/type_x.original.rb
|
1490
1494
|
- spec/fixtures/upgrader/type_x.transformed.rb
|
1491
1495
|
- spec/generators/graphql/enum_generator_spec.rb
|
1492
|
-
- spec/generators/graphql/function_generator_spec.rb
|
1493
1496
|
- spec/generators/graphql/install_generator_spec.rb
|
1494
1497
|
- spec/generators/graphql/interface_generator_spec.rb
|
1495
1498
|
- spec/generators/graphql/loader_generator_spec.rb
|
@@ -1603,6 +1606,7 @@ test_files:
|
|
1603
1606
|
- spec/graphql/schema/warden_spec.rb
|
1604
1607
|
- spec/graphql/schema_spec.rb
|
1605
1608
|
- spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb
|
1609
|
+
- spec/graphql/static_validation/rules/argument_names_are_unique_spec.rb
|
1606
1610
|
- spec/graphql/static_validation/rules/arguments_are_defined_spec.rb
|
1607
1611
|
- spec/graphql/static_validation/rules/directives_are_defined_spec.rb
|
1608
1612
|
- spec/graphql/static_validation/rules/directives_are_in_valid_locations_spec.rb
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require "rails/generators/named_base"
|
3
|
-
require_relative "core"
|
4
|
-
|
5
|
-
module Graphql
|
6
|
-
module Generators
|
7
|
-
class FunctionGenerator < Rails::Generators::NamedBase
|
8
|
-
include Core
|
9
|
-
|
10
|
-
desc "Create a GraphQL::Function by name"
|
11
|
-
source_root File.expand_path('../templates', __FILE__)
|
12
|
-
|
13
|
-
def create_function_file
|
14
|
-
template "function.erb", "#{options[:directory]}/functions/#{file_path}.rb"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
class Functions::<%= class_name %> < GraphQL::Function
|
2
|
-
# Define `initialize` to store field-level options, eg
|
3
|
-
#
|
4
|
-
# field :myField, function: Functions::<%= class_name %>.new(type: MyType)
|
5
|
-
#
|
6
|
-
# attr_reader :type
|
7
|
-
# def initialize(type:)
|
8
|
-
# @type = type
|
9
|
-
# end
|
10
|
-
|
11
|
-
# add arguments by type:
|
12
|
-
# argument :id, !types.ID
|
13
|
-
|
14
|
-
# Resolve function:
|
15
|
-
def call(obj, args, ctx)
|
16
|
-
end
|
17
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require "spec_helper"
|
3
|
-
require "generators/graphql/function_generator"
|
4
|
-
|
5
|
-
class GraphQLGeneratorsFunctionGeneratorTest < BaseGeneratorTest
|
6
|
-
tests Graphql::Generators::FunctionGenerator
|
7
|
-
|
8
|
-
test "it generates an empty function by name" do
|
9
|
-
run_generator(["FindRecord"])
|
10
|
-
|
11
|
-
expected_content = <<-RUBY
|
12
|
-
class Functions::FindRecord < GraphQL::Function
|
13
|
-
# Define `initialize` to store field-level options, eg
|
14
|
-
#
|
15
|
-
# field :myField, function: Functions::FindRecord.new(type: MyType)
|
16
|
-
#
|
17
|
-
# attr_reader :type
|
18
|
-
# def initialize(type:)
|
19
|
-
# @type = type
|
20
|
-
# end
|
21
|
-
|
22
|
-
# add arguments by type:
|
23
|
-
# argument :id, !types.ID
|
24
|
-
|
25
|
-
# Resolve function:
|
26
|
-
def call(obj, args, ctx)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
RUBY
|
30
|
-
|
31
|
-
assert_file "app/graphql/functions/find_record.rb", expected_content
|
32
|
-
end
|
33
|
-
|
34
|
-
test "it generates a namespaced function by name" do
|
35
|
-
run_generator(["finders::find_record"])
|
36
|
-
|
37
|
-
expected_content = <<-RUBY
|
38
|
-
class Functions::Finders::FindRecord < GraphQL::Function
|
39
|
-
# Define `initialize` to store field-level options, eg
|
40
|
-
#
|
41
|
-
# field :myField, function: Functions::Finders::FindRecord.new(type: MyType)
|
42
|
-
#
|
43
|
-
# attr_reader :type
|
44
|
-
# def initialize(type:)
|
45
|
-
# @type = type
|
46
|
-
# end
|
47
|
-
|
48
|
-
# add arguments by type:
|
49
|
-
# argument :id, !types.ID
|
50
|
-
|
51
|
-
# Resolve function:
|
52
|
-
def call(obj, args, ctx)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
RUBY
|
56
|
-
|
57
|
-
assert_file "app/graphql/functions/finders/find_record.rb", expected_content
|
58
|
-
end
|
59
|
-
end
|