graphql 1.5.4 → 1.5.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/define/instance_definable.rb +54 -29
  3. data/lib/graphql/enum_type.rb +0 -1
  4. data/lib/graphql/execution/execute.rb +15 -9
  5. data/lib/graphql/execution/field_result.rb +3 -6
  6. data/lib/graphql/execution/lazy/lazy_method_map.rb +66 -12
  7. data/lib/graphql/language.rb +15 -1
  8. data/lib/graphql/language/nodes.rb +17 -1
  9. data/lib/graphql/language/parser.rb +8 -8
  10. data/lib/graphql/language/parser.y +8 -8
  11. data/lib/graphql/query.rb +3 -4
  12. data/lib/graphql/query/literal_input.rb +2 -0
  13. data/lib/graphql/relay/mutation.rb +2 -3
  14. data/lib/graphql/schema.rb +1 -3
  15. data/lib/graphql/schema/loader.rb +26 -4
  16. data/lib/graphql/static_validation/all_rules.rb +1 -0
  17. data/lib/graphql/static_validation/definition_dependencies.rb +0 -1
  18. data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +32 -0
  19. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +11 -5
  20. data/lib/graphql/static_validation/validation_context.rb +0 -1
  21. data/lib/graphql/version.rb +1 -1
  22. data/spec/graphql/define/instance_definable_spec.rb +21 -0
  23. data/spec/graphql/execution/execute_spec.rb +61 -0
  24. data/spec/graphql/execution/lazy/lazy_method_map_spec.rb +57 -0
  25. data/spec/graphql/input_object_type_spec.rb +2 -2
  26. data/spec/graphql/introspection/input_value_type_spec.rb +3 -1
  27. data/spec/graphql/introspection/type_type_spec.rb +1 -0
  28. data/spec/graphql/query_spec.rb +69 -10
  29. data/spec/graphql/schema/loader_spec.rb +7 -3
  30. data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +0 -1
  31. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +6 -6
  32. data/spec/graphql/static_validation/rules/no_definitions_are_present_spec.rb +28 -0
  33. data/spec/graphql/static_validation/rules/variable_usages_are_allowed_spec.rb +17 -0
  34. data/spec/spec_helper.rb +2 -1
  35. data/spec/support/dummy/schema.rb +11 -0
  36. data/spec/support/star_wars/data.rb +16 -2
  37. metadata +21 -30
@@ -104,6 +104,7 @@ describe GraphQL::Schema::Loader do
104
104
  argument :varied, variant_input_type, default_value: { id: "123", int: 234, float: 2.3, enum: :foo, sub: [{ string: "str" }] }
105
105
  argument :variedWithNull, variant_input_type_with_nulls, default_value: { id: nil, int: nil, float: nil, enum: nil, sub: nil, bigint: nil, bool: nil }
106
106
  argument :enum, choice_type, default_value: :foo
107
+ argument :array, types[!types.String], default_value: ["foo", "bar"]
107
108
  end
108
109
 
109
110
  field :content do
@@ -223,10 +224,13 @@ describe GraphQL::Schema::Loader do
223
224
  it "sets correct default values for complex field arguments" do
224
225
  type = loaded_schema.types['Query']
225
226
  field = type.fields['post']
226
- arg = field.arguments['varied']
227
227
 
228
- assert_equal arg.default_value, { 'id' => "123", 'int' => 234, 'float' => 2.3, 'enum' => "FOO", 'sub' => [{ 'string' => "str" }] }
229
- assert !arg.default_value.key?('bool'), 'Omits default value for unspecified arguments'
228
+ varied = field.arguments['varied']
229
+ assert_equal varied.default_value, { 'id' => "123", 'int' => 234, 'float' => 2.3, 'enum' => "FOO", 'sub' => [{ 'string' => "str" }] }
230
+ assert !varied.default_value.key?('bool'), 'Omits default value for unspecified arguments'
231
+
232
+ array = field.arguments['array']
233
+ assert_equal array.default_value, ["foo", "bar"]
230
234
  end
231
235
 
232
236
  it "does not set default value when there are none on input fields" do
@@ -82,7 +82,6 @@ describe GraphQL::StaticValidation::ArgumentLiteralsAreCompatible do
82
82
  end
83
83
  end
84
84
 
85
-
86
85
  describe "null value" do
87
86
  describe "nullable arg" do
88
87
  let(:schema) {
@@ -156,7 +156,7 @@ describe GraphQL::StaticValidation::FieldsWillMerge do
156
156
  |}
157
157
 
158
158
  it "fails rule" do
159
- assert_equal [%q(Field 'doesKnowCommand' has an argument conflict: {"dogCommand":"SIT"} or {"dogCommand":"$dogCommand"}?)], error_messages
159
+ assert_equal [%q(Field 'doesKnowCommand' has an argument conflict: {dogCommand:"SIT"} or {dogCommand:"$dogCommand"}?)], error_messages
160
160
  end
161
161
  end
162
162
 
@@ -171,7 +171,7 @@ describe GraphQL::StaticValidation::FieldsWillMerge do
171
171
  |}
172
172
 
173
173
  it "fails rule" do
174
- assert_equal [%q(Field 'doesKnowCommand' has an argument conflict: {"dogCommand":"$varOne"} or {"dogCommand":"$varTwo"}?)], error_messages
174
+ assert_equal [%q(Field 'doesKnowCommand' has an argument conflict: {dogCommand:"$varOne"} or {dogCommand:"$varTwo"}?)], error_messages
175
175
  end
176
176
  end
177
177
 
@@ -246,7 +246,7 @@ describe GraphQL::StaticValidation::FieldsWillMerge do
246
246
  |}
247
247
 
248
248
  it "fails rule" do
249
- assert_equal [%q(Field 'doesKnowCommand' has an argument conflict: {} or {"dogCommand":"HEEL"}?)], error_messages
249
+ assert_equal [%q(Field 'doesKnowCommand' has an argument conflict: {} or {dogCommand:"HEEL"}?)], error_messages
250
250
  end
251
251
  end
252
252
 
@@ -261,7 +261,7 @@ describe GraphQL::StaticValidation::FieldsWillMerge do
261
261
  |}
262
262
 
263
263
  it "fails rule" do
264
- assert_equal [%q(Field 'doesKnowCommand' has an argument conflict: {"dogCommand":"SIT"} or {}?)], error_messages
264
+ assert_equal [%q(Field 'doesKnowCommand' has an argument conflict: {dogCommand:"SIT"} or {}?)], error_messages
265
265
  end
266
266
  end
267
267
 
@@ -276,7 +276,7 @@ describe GraphQL::StaticValidation::FieldsWillMerge do
276
276
  |}
277
277
 
278
278
  it "fails rule" do
279
- assert_equal [%q(Field 'doesKnowCommand' has an argument conflict: {"dogCommand":"SIT"} or {"dogCommand":"HEEL"}?)], error_messages
279
+ assert_equal [%q(Field 'doesKnowCommand' has an argument conflict: {dogCommand:"SIT"} or {dogCommand:"HEEL"}?)], error_messages
280
280
  end
281
281
  end
282
282
 
@@ -291,7 +291,7 @@ describe GraphQL::StaticValidation::FieldsWillMerge do
291
291
  |}
292
292
 
293
293
  it "fails rule" do
294
- assert_equal [%q(Field 'image' has an argument conflict: {"maxWidth":"10"} or {"maxWidth":"20"}?)], error_messages
294
+ assert_equal [%q(Field 'image' has an argument conflict: {maxWidth:"10"} or {maxWidth:"20"}?)], error_messages
295
295
  end
296
296
  end
297
297
 
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe GraphQL::StaticValidation::NoDefinitionsArePresent do
5
+ include StaticValidationHelpers
6
+ describe "when schema definitions are present in the query" do
7
+ let(:query_string) {
8
+ <<-GRAPHQL
9
+ {
10
+ cheese(id: 1) { flavor }
11
+ }
12
+
13
+ type Thing {
14
+ stuff: Int
15
+ }
16
+
17
+ scalar Date
18
+ GRAPHQL
19
+ }
20
+
21
+ it "adds an error" do
22
+ assert_equal 1, errors.length
23
+ err = errors[0]
24
+ assert_equal "Query cannot contain schema definitions", err["message"]
25
+ assert_equal [{"line"=>5, "column"=>7}, {"line"=>9, "column"=>7}], err["locations"]
26
+ end
27
+ end
28
+ end
@@ -63,4 +63,21 @@ describe GraphQL::StaticValidation::VariableUsagesAreAllowed do
63
63
  ]
64
64
  assert_equal(expected, errors)
65
65
  end
66
+
67
+ describe "input objects that are out of place" do
68
+ let(:query_string) { <<-GRAPHQL
69
+ query getCheese($id: ID!) {
70
+ cheese(id: {blah: $id} ) {
71
+ __typename @nonsense(id: {blah: $id})
72
+ nonsense(id: {blah: {blah: $id}})
73
+ }
74
+ }
75
+ GRAPHQL
76
+ }
77
+
78
+ it "adds an error" do
79
+ assert_equal 3, errors.length
80
+ assert_equal "Argument 'id' on Field 'cheese' has an invalid value. Expected type 'Int!'.", errors[0]["message"]
81
+ end
82
+ end
66
83
  end
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,8 @@ require "codeclimate-test-reporter"
3
3
  CodeClimate::TestReporter.start
4
4
  require "rails/all"
5
5
  require "rails/generators"
6
- require "sqlite3"
6
+ require "jdbc/sqlite3" if RUBY_ENGINE == 'jruby'
7
+ require "sqlite3" if RUBY_ENGINE == 'ruby'
7
8
  require "sequel"
8
9
  require "graphql"
9
10
  require "benchmark"
@@ -168,6 +168,15 @@ module Dummy
168
168
  end
169
169
  end
170
170
 
171
+ ResourceOrderType = GraphQL::InputObjectType.define {
172
+ name "ResourceOrderType"
173
+ description "Properties used to determine ordering"
174
+
175
+ argument :direction, !types.String do
176
+ description "ASC or DESC"
177
+ end
178
+ }
179
+
171
180
  DairyProductInputType = GraphQL::InputObjectType.define {
172
181
  name "DairyProductInput"
173
182
  description "Properties for finding a dairy product"
@@ -188,6 +197,8 @@ module Dummy
188
197
 
189
198
  # ensure default can be false
190
199
  input_field :organic, types.Boolean, default_value: false
200
+
201
+ input_field :order_by, -> { ResourceOrderType }, default_value: { direction: 'ASC' }
191
202
  }
192
203
 
193
204
  DeepNonNullType = GraphQL::ObjectType.define do
@@ -1,5 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
  require 'ostruct'
3
+
4
+ # platform helper
5
+ def jruby?
6
+ RUBY_ENGINE == 'jruby'
7
+ end
8
+
3
9
  module StarWars
4
10
  names = [
5
11
  'X-Wing',
@@ -15,7 +21,11 @@ module StarWars
15
21
  # ActiveRecord::Base.logger = Logger.new(STDOUT)
16
22
  `rm -f ./_test_.db`
17
23
  # Set up "Bases" in ActiveRecord
18
- ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: "./_test_.db")
24
+ if jruby?
25
+ ActiveRecord::Base.establish_connection(adapter: "jdbcsqlite3", database: "./_test_.db")
26
+ else
27
+ ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: "./_test_.db")
28
+ end
19
29
 
20
30
  ActiveRecord::Schema.define do
21
31
  self.verbose = false
@@ -37,7 +47,11 @@ module StarWars
37
47
  Base.create!(name: "Headquarters", planet: "Coruscant", faction_id: 2)
38
48
 
39
49
  # Also, set up Bases with Sequel
40
- DB = Sequel.sqlite("./_test_.db")
50
+ DB = if jruby?
51
+ Sequel.connect('jdbc:sqlite:./_test_.db')
52
+ else
53
+ Sequel.sqlite("./_test_.db")
54
+ end
41
55
  class SequelBase < Sequel::Model(:bases)
42
56
  end
43
57
 
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.5.4
4
+ version: 1.5.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-03-22 00:00:00.000000000 Z
11
+ date: 2017-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: concurrent-ruby
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: guard
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -220,20 +234,6 @@ dependencies:
220
234
  - - "~>"
221
235
  - !ruby/object:Gem::Version
222
236
  version: '0.45'
223
- - !ruby/object:Gem::Dependency
224
- name: ruby-prof
225
- requirement: !ruby/object:Gem::Requirement
226
- requirements:
227
- - - ">="
228
- - !ruby/object:Gem::Version
229
- version: '0'
230
- type: :development
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- requirements:
234
- - - ">="
235
- - !ruby/object:Gem::Version
236
- version: '0'
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: appraisal
239
239
  requirement: !ruby/object:Gem::Requirement
@@ -262,20 +262,6 @@ dependencies:
262
262
  - - ">="
263
263
  - !ruby/object:Gem::Version
264
264
  version: '0'
265
- - !ruby/object:Gem::Dependency
266
- name: sqlite3
267
- requirement: !ruby/object:Gem::Requirement
268
- requirements:
269
- - - ">="
270
- - !ruby/object:Gem::Version
271
- version: '0'
272
- type: :development
273
- prerelease: false
274
- version_requirements: !ruby/object:Gem::Requirement
275
- requirements:
276
- - - ">="
277
- - !ruby/object:Gem::Version
278
- version: '0'
279
265
  - !ruby/object:Gem::Dependency
280
266
  name: github-pages
281
267
  requirement: !ruby/object:Gem::Requirement
@@ -489,6 +475,7 @@ files:
489
475
  - lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb
490
476
  - lib/graphql/static_validation/rules/fragments_are_used.rb
491
477
  - lib/graphql/static_validation/rules/mutation_root_exists.rb
478
+ - lib/graphql/static_validation/rules/no_definitions_are_present.rb
492
479
  - lib/graphql/static_validation/rules/operation_names_are_valid.rb
493
480
  - lib/graphql/static_validation/rules/required_arguments_are_present.rb
494
481
  - lib/graphql/static_validation/rules/subscription_root_exists.rb
@@ -533,6 +520,7 @@ files:
533
520
  - spec/graphql/directive_spec.rb
534
521
  - spec/graphql/enum_type_spec.rb
535
522
  - spec/graphql/execution/execute_spec.rb
523
+ - spec/graphql/execution/lazy/lazy_method_map_spec.rb
536
524
  - spec/graphql/execution/lazy_spec.rb
537
525
  - spec/graphql/execution/typecast_spec.rb
538
526
  - spec/graphql/execution_error_spec.rb
@@ -604,6 +592,7 @@ files:
604
592
  - spec/graphql/static_validation/rules/fragments_are_on_composite_types_spec.rb
605
593
  - spec/graphql/static_validation/rules/fragments_are_used_spec.rb
606
594
  - spec/graphql/static_validation/rules/mutation_root_exists_spec.rb
595
+ - spec/graphql/static_validation/rules/no_definitions_are_present_spec.rb
607
596
  - spec/graphql/static_validation/rules/operation_names_are_valid_spec.rb
608
597
  - spec/graphql/static_validation/rules/required_arguments_are_present_spec.rb
609
598
  - spec/graphql/static_validation/rules/subscription_root_exists_spec.rb
@@ -676,6 +665,7 @@ test_files:
676
665
  - spec/graphql/directive_spec.rb
677
666
  - spec/graphql/enum_type_spec.rb
678
667
  - spec/graphql/execution/execute_spec.rb
668
+ - spec/graphql/execution/lazy/lazy_method_map_spec.rb
679
669
  - spec/graphql/execution/lazy_spec.rb
680
670
  - spec/graphql/execution/typecast_spec.rb
681
671
  - spec/graphql/execution_error_spec.rb
@@ -747,6 +737,7 @@ test_files:
747
737
  - spec/graphql/static_validation/rules/fragments_are_on_composite_types_spec.rb
748
738
  - spec/graphql/static_validation/rules/fragments_are_used_spec.rb
749
739
  - spec/graphql/static_validation/rules/mutation_root_exists_spec.rb
740
+ - spec/graphql/static_validation/rules/no_definitions_are_present_spec.rb
750
741
  - spec/graphql/static_validation/rules/operation_names_are_valid_spec.rb
751
742
  - spec/graphql/static_validation/rules/required_arguments_are_present_spec.rb
752
743
  - spec/graphql/static_validation/rules/subscription_root_exists_spec.rb