graphql 1.7.7 → 1.7.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/enum_type.rb +1 -1
  3. data/lib/graphql/field.rb +10 -1
  4. data/lib/graphql/input_object_type.rb +3 -1
  5. data/lib/graphql/introspection/arguments_field.rb +1 -0
  6. data/lib/graphql/introspection/enum_values_field.rb +1 -0
  7. data/lib/graphql/introspection/fields_field.rb +1 -0
  8. data/lib/graphql/introspection/input_fields_field.rb +1 -0
  9. data/lib/graphql/introspection/interfaces_field.rb +1 -0
  10. data/lib/graphql/introspection/of_type_field.rb +1 -0
  11. data/lib/graphql/introspection/possible_types_field.rb +1 -0
  12. data/lib/graphql/introspection/schema_field.rb +1 -0
  13. data/lib/graphql/introspection/type_by_name_field.rb +1 -0
  14. data/lib/graphql/introspection/typename_field.rb +1 -0
  15. data/lib/graphql/language.rb +1 -0
  16. data/lib/graphql/language/document_from_schema_definition.rb +129 -37
  17. data/lib/graphql/language/generation.rb +3 -182
  18. data/lib/graphql/language/nodes.rb +12 -2
  19. data/lib/graphql/language/parser.rb +63 -55
  20. data/lib/graphql/language/parser.y +2 -1
  21. data/lib/graphql/language/printer.rb +351 -0
  22. data/lib/graphql/object_type.rb +1 -1
  23. data/lib/graphql/query/arguments.rb +27 -9
  24. data/lib/graphql/query/literal_input.rb +4 -1
  25. data/lib/graphql/schema/printer.rb +33 -266
  26. data/lib/graphql/tracing/scout_tracing.rb +2 -2
  27. data/lib/graphql/version.rb +1 -1
  28. data/spec/graphql/language/document_from_schema_definition_spec.rb +729 -296
  29. data/spec/graphql/language/generation_spec.rb +21 -186
  30. data/spec/graphql/language/nodes_spec.rb +21 -0
  31. data/spec/graphql/language/printer_spec.rb +203 -0
  32. data/spec/graphql/query/arguments_spec.rb +33 -11
  33. data/spec/graphql/schema/build_from_definition_spec.rb +13 -4
  34. data/spec/graphql/schema/printer_spec.rb +14 -14
  35. metadata +5 -2
@@ -16,14 +16,22 @@ describe GraphQL::Query::Arguments do
16
16
  argument :c, !test_input_1, as: :inputObject
17
17
  end
18
18
 
19
- GraphQL::Query::Arguments.new({
20
- a: 1,
21
- b: 2,
22
- c: GraphQL::Query::Arguments.new({
23
- d: 3,
24
- e: 4,
25
- }, argument_definitions: test_input_1.arguments),
26
- }, argument_definitions: test_input_2.arguments)
19
+ GraphQL::Query::Arguments.new(
20
+ {
21
+ a: 1,
22
+ b: 2,
23
+ c: GraphQL::Query::Arguments.new(
24
+ {
25
+ d: 3,
26
+ e: 4,
27
+ },
28
+ argument_definitions: test_input_1.arguments,
29
+ defaults_used: Set.new
30
+ ),
31
+ },
32
+ argument_definitions: test_input_2.arguments,
33
+ defaults_used: Set.new
34
+ )
27
35
  }
28
36
 
29
37
  it "returns keys as strings, with aliases" do
@@ -73,7 +81,11 @@ describe GraphQL::Query::Arguments do
73
81
  )
74
82
  end
75
83
 
76
- new_arguments = GraphQL::Query::Arguments.new(transformed_args, argument_definitions: types)
84
+ new_arguments = GraphQL::Query::Arguments.new(
85
+ transformed_args,
86
+ argument_definitions: types,
87
+ defaults_used: Set.new
88
+ )
77
89
  expected_hash = {
78
90
  "A" => 1,
79
91
  "B" => 2,
@@ -96,7 +108,8 @@ describe GraphQL::Query::Arguments do
96
108
  it "wraps input objects, but not other hashes" do
97
109
  args = GraphQL::Query::Arguments.new(
98
110
  {a: 1, b: {a: 2}, c: {a: 3}},
99
- argument_definitions: input_type.arguments
111
+ argument_definitions: input_type.arguments,
112
+ defaults_used: Set.new
100
113
  )
101
114
  assert_kind_of GraphQL::Query::Arguments, args["b"]
102
115
  assert_instance_of Hash, args["c"]
@@ -198,6 +211,15 @@ describe GraphQL::Query::Arguments do
198
211
  assert_equal({"a" => 1, "b" => 2}, last_args.to_h)
199
212
  end
200
213
 
214
+ it "indicates when default argument values were applied" do
215
+ schema.execute("{ argTest(a: 1) }")
216
+
217
+ last_args = arg_values.last
218
+
219
+ assert_equal false, last_args.default_used?('a')
220
+ assert_equal true, last_args.default_used?('b')
221
+ end
222
+
201
223
  it "works from variables" do
202
224
  variables = { "arg" => { "a" => 1, "d" => nil } }
203
225
  schema.execute("query ArgTest($arg: TestInput){ argTest(d: $arg) }", variables: variables)
@@ -306,7 +328,7 @@ describe GraphQL::Query::Arguments do
306
328
  assert_nil input_object.arguments_class
307
329
 
308
330
  GraphQL::Query::Arguments.construct_arguments_class(input_object)
309
- args = input_object.arguments_class.new({foo: 3, bar: -90})
331
+ args = input_object.arguments_class.new({foo: 3, bar: -90}, Set.new)
310
332
 
311
333
  assert_equal 3, args.foo
312
334
  assert_equal -90, args.bar
@@ -308,7 +308,7 @@ schema {
308
308
  }
309
309
 
310
310
  type Hello {
311
- str(int: Int, bool: Boolean): String
311
+ str(bool: Boolean, int: Int): String
312
312
  }
313
313
  SCHEMA
314
314
 
@@ -505,7 +505,7 @@ type HelloScalars {
505
505
  }
506
506
 
507
507
  type Mutation {
508
- addHelloScalars(str: String, int: Int, bool: Boolean): HelloScalars
508
+ addHelloScalars(bool: Boolean, int: Int, str: String): HelloScalars
509
509
  }
510
510
  SCHEMA
511
511
 
@@ -520,7 +520,7 @@ enum Color {
520
520
  }
521
521
 
522
522
  type Mutation {
523
- hello(str: String, int: Int, color: Color = RED, nullDefault: Int = null): String
523
+ hello(color: Color = RED, int: Int, nullDefault: Int = null, str: String): String
524
524
  }
525
525
 
526
526
  type Query {
@@ -545,7 +545,7 @@ type HelloScalars {
545
545
  }
546
546
 
547
547
  type Subscription {
548
- subscribeHelloScalars(str: String, int: Int, bool: Boolean): HelloScalars
548
+ subscribeHelloScalars(bool: Boolean, int: Int, str: String): HelloScalars
549
549
  }
550
550
  SCHEMA
551
551
 
@@ -603,6 +603,15 @@ type Query {
603
603
 
604
604
  build_schema_and_compare_output(schema.chop)
605
605
  end
606
+
607
+ it 'supports empty types' do
608
+ schema = <<-SCHEMA
609
+ type Query {
610
+ }
611
+ SCHEMA
612
+
613
+ build_schema_and_compare_output(schema.chop)
614
+ end
606
615
  end
607
616
 
608
617
  describe 'Failures' do
@@ -136,6 +136,14 @@ schema {
136
136
  query: Root
137
137
  }
138
138
 
139
+ # Marks an element of a GraphQL schema as no longer supported.
140
+ directive @deprecated(
141
+ # Explains why this element was deprecated, usually also including a suggestion
142
+ # for how to access supported similar data. Formatted in
143
+ # [Markdown](https://daringfireball.net/projects/markdown/).
144
+ reason: String = "No longer supported"
145
+ ) on FIELD_DEFINITION | ENUM_VALUE
146
+
139
147
  # Directs the executor to include this field or fragment only when the `if` argument is true.
140
148
  directive @include(
141
149
  # Included when true.
@@ -148,14 +156,6 @@ directive @skip(
148
156
  if: Boolean!
149
157
  ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
150
158
 
151
- # Marks an element of a GraphQL schema as no longer supported.
152
- directive @deprecated(
153
- # Explains why this element was deprecated, usually also including a suggestion
154
- # for how to access supported similar data. Formatted in
155
- # [Markdown](https://daringfireball.net/projects/markdown/).
156
- reason: String = "No longer supported"
157
- ) on FIELD_DEFINITION | ENUM_VALUE
158
-
159
159
  # A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
160
160
  #
161
161
  # In some cases, you need to provide options to alter GraphQL's execution behavior
@@ -345,7 +345,6 @@ schema {
345
345
  subscription: Subscription
346
346
  }
347
347
  SCHEMA
348
-
349
348
  assert_match expected, GraphQL::Schema::Printer.print_schema(custom_schema)
350
349
  end
351
350
 
@@ -390,7 +389,7 @@ type Audio {
390
389
 
391
390
  enum Choice {
392
391
  BAR
393
- BAZ @deprecated(reason: "Use \\\"BAR\\\".")
392
+ BAZ @deprecated(reason: "Use "BAR".")
394
393
  FOO
395
394
  WOZ @deprecated
396
395
  }
@@ -439,7 +438,7 @@ interface Node {
439
438
  type Post {
440
439
  body: String!
441
440
  comments: [Comment!]
442
- comments_count: Int! @deprecated(reason: "Use \\\"comments\\\".")
441
+ comments_count: Int! @deprecated(reason: "Use "comments".")
443
442
  id: ID!
444
443
  title: String!
445
444
  }
@@ -489,7 +488,6 @@ enum Choice {
489
488
  }
490
489
 
491
490
  type Subscription {
492
-
493
491
  }
494
492
 
495
493
  input Varied {
@@ -509,7 +507,9 @@ SCHEMA
509
507
  when GraphQL::Argument
510
508
  member.name != "id"
511
509
  else
512
- member.deprecation_reason.nil?
510
+ if member.respond_to?(:deprecation_reason)
511
+ member.deprecation_reason.nil?
512
+ end
513
513
  end
514
514
  }
515
515
 
@@ -600,7 +600,7 @@ SCHEMA
600
600
  type Post {
601
601
  body: String!
602
602
  comments: [Comment!]
603
- comments_count: Int! @deprecated(reason: \"Use \\\"comments\\\".\")
603
+ comments_count: Int! @deprecated(reason: "Use "comments".")
604
604
  id: ID!
605
605
  title: String!
606
606
  }
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.7
4
+ version: 1.7.8
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-29 00:00:00.000000000 Z
11
+ date: 2018-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -426,6 +426,7 @@ files:
426
426
  - lib/graphql/language/nodes.rb
427
427
  - lib/graphql/language/parser.rb
428
428
  - lib/graphql/language/parser.y
429
+ - lib/graphql/language/printer.rb
429
430
  - lib/graphql/language/token.rb
430
431
  - lib/graphql/language/visitor.rb
431
432
  - lib/graphql/list_type.rb
@@ -905,6 +906,7 @@ files:
905
906
  - spec/graphql/language/lexer_spec.rb
906
907
  - spec/graphql/language/nodes_spec.rb
907
908
  - spec/graphql/language/parser_spec.rb
909
+ - spec/graphql/language/printer_spec.rb
908
910
  - spec/graphql/language/visitor_spec.rb
909
911
  - spec/graphql/list_type_spec.rb
910
912
  - spec/graphql/non_null_type_spec.rb
@@ -1375,6 +1377,7 @@ test_files:
1375
1377
  - spec/graphql/language/lexer_spec.rb
1376
1378
  - spec/graphql/language/nodes_spec.rb
1377
1379
  - spec/graphql/language/parser_spec.rb
1380
+ - spec/graphql/language/printer_spec.rb
1378
1381
  - spec/graphql/language/visitor_spec.rb
1379
1382
  - spec/graphql/list_type_spec.rb
1380
1383
  - spec/graphql/non_null_type_spec.rb