graphql 0.9.5 → 0.10.0

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/base_type.rb +24 -0
  3. data/lib/graphql/definition_helpers/defined_by_config.rb +5 -4
  4. data/lib/graphql/definition_helpers/non_null_with_bang.rb +1 -1
  5. data/lib/graphql/definition_helpers/type_definer.rb +1 -1
  6. data/lib/graphql/enum_type.rb +16 -3
  7. data/lib/graphql/input_object_type.rb +10 -0
  8. data/lib/graphql/language.rb +0 -5
  9. data/lib/graphql/language/nodes.rb +79 -75
  10. data/lib/graphql/language/parser.rb +109 -106
  11. data/lib/graphql/language/transform.rb +100 -91
  12. data/lib/graphql/language/visitor.rb +78 -74
  13. data/lib/graphql/list_type.rb +5 -0
  14. data/lib/graphql/non_null_type.rb +6 -2
  15. data/lib/graphql/query.rb +58 -9
  16. data/lib/graphql/query/arguments.rb +29 -26
  17. data/lib/graphql/query/base_execution/value_resolution.rb +3 -3
  18. data/lib/graphql/query/directive_chain.rb +1 -1
  19. data/lib/graphql/query/executor.rb +6 -27
  20. data/lib/graphql/query/literal_input.rb +89 -0
  21. data/lib/graphql/query/ruby_input.rb +20 -0
  22. data/lib/graphql/query/serial_execution/field_resolution.rb +1 -1
  23. data/lib/graphql/query/variables.rb +39 -0
  24. data/lib/graphql/scalar_type.rb +27 -5
  25. data/lib/graphql/schema.rb +5 -0
  26. data/lib/graphql/schema/type_expression.rb +28 -0
  27. data/lib/graphql/static_validation/literal_validator.rb +5 -2
  28. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +0 -2
  29. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +1 -1
  30. data/lib/graphql/version.rb +1 -1
  31. data/readme.md +3 -2
  32. data/spec/graphql/enum_type_spec.rb +7 -2
  33. data/spec/graphql/input_object_type_spec.rb +45 -0
  34. data/spec/graphql/language/parser_spec.rb +2 -1
  35. data/spec/graphql/language/transform_spec.rb +5 -0
  36. data/spec/graphql/query/base_execution/value_resolution_spec.rb +46 -0
  37. data/spec/graphql/query/context_spec.rb +37 -0
  38. data/spec/graphql/query/executor_spec.rb +33 -0
  39. data/spec/graphql/query_spec.rb +110 -26
  40. data/spec/graphql/schema/type_expression_spec.rb +38 -0
  41. data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +2 -2
  42. data/spec/support/dairy_app.rb +17 -17
  43. data/spec/support/dairy_data.rb +2 -2
  44. metadata +12 -2
@@ -5,8 +5,8 @@ describe GraphQL::StaticValidation::ArgumentLiteralsAreCompatible do
5
5
  query getCheese {
6
6
  cheese(id: "aasdlkfj") { source }
7
7
  cheese(id: 1) { source @skip(if: {id: 1})}
8
- yakSource: searchDairy(product: {source: YAK, fatContent: 1.1}) { source }
9
- badSource: searchDairy(product: {source: 1.1}) { source }
8
+ yakSource: searchDairy(product: [{source: YAK, fatContent: 1.1}]) { source }
9
+ badSource: searchDairy(product: [{source: 1.1}]) { source }
10
10
  }
11
11
 
12
12
  fragment cheeseFields on Cheese {
@@ -32,17 +32,15 @@ CheeseType = GraphQL::ObjectType.define do
32
32
  field :id, !types.Int, "Unique identifier"
33
33
  field :flavor, !types.String, "Kind of Cheese"
34
34
 
35
- # Or can define by block:
36
- field :source do
37
- type(!DairyAnimalEnum)
38
- description("Animal which produced the milk for this cheese")
39
- end
35
+ field :source, !DairyAnimalEnum,
36
+ "Animal which produced the milk for this cheese"
40
37
 
38
+ # Or can define by block:
41
39
  field :similarCheese, -> { CheeseType }, "Cheeses like this one" do
42
40
  argument :source, !types[!DairyAnimalEnum]
43
41
  resolve -> (t, a, c) {
44
42
  # get the strings out:
45
- sources = a["source"].map(&:name)
43
+ sources = a["source"]
46
44
  if sources.include?("YAK")
47
45
  raise NoSuchDairyError.new("No cheeses are made from Yak milk!")
48
46
  else
@@ -67,6 +65,9 @@ MilkType = GraphQL::ObjectType.define do
67
65
  field :fatContent, !types.Float, "Percentage which is milkfat"
68
66
  field :flavors, types[types.String], "Chocolate, Strawberry, etc" do
69
67
  argument :limit, types.Int
68
+ resolve -> (milk, args, ctx) {
69
+ args[:limit] ? milk.flavors.first(args[:limit]) : milk.flavors
70
+ }
70
71
  end
71
72
  end
72
73
 
@@ -98,12 +99,6 @@ CowType = GraphQL::ObjectType.define do
98
99
  field :last_produced_dairy, DairyProductUnion
99
100
  end
100
101
 
101
- MaybeNullType = GraphQL::ObjectType.define do
102
- name "MaybeNull"
103
- description "An object whose fields return nil"
104
- field :cheese, CheeseType
105
- end
106
-
107
102
  DairyProductInputType = GraphQL::InputObjectType.define {
108
103
  name "DairyProductInput"
109
104
  description "Properties for finding a dairy product"
@@ -121,7 +116,11 @@ class FetchField
121
116
  description(desc)
122
117
  argument :id, id_type
123
118
 
124
- resolve -> (t, a, c) { data[a["id"].to_i] }
119
+ resolve -> (t, a, c) {
120
+ id_string = a["id"].to_s # Cheese has Int type, Milk has ID type :(
121
+ id, item = data.find { |id, item| id.to_s == id_string }
122
+ item
123
+ }
125
124
  end
126
125
  end
127
126
  end
@@ -166,12 +165,13 @@ QueryType = GraphQL::ObjectType.define do
166
165
  field :searchDairy do
167
166
  description "Find dairy products matching a description"
168
167
  type !DairyProductUnion
169
- argument :product, DairyProductInputType
170
- resolve -> (t, a, c) {
168
+ # This is a list just for testing 😬
169
+ argument :product, types[DairyProductInputType], default_value: [{"source" => "SHEEP"}]
170
+ resolve -> (t, args, c) {
171
+ source = args["product"][0][:source] # String or Sym is ok
171
172
  products = CHEESES.values + MILKS.values
172
- source = a["product"][:source] # String or sym is ok
173
173
  if !source.nil?
174
- products = products.select { |p| p.source == source }
174
+ products = products.select { |pr| pr.source == source }
175
175
  end
176
176
  products.first
177
177
  }
@@ -5,9 +5,9 @@ CHEESES = {
5
5
  3 => Cheese.new(3, "Manchego", 0.065, "SHEEP")
6
6
  }
7
7
 
8
- Milk = Struct.new(:id, :fatContent, :source)
8
+ Milk = Struct.new(:id, :fatContent, :source, :flavors)
9
9
  MILKS = {
10
- 1 => Milk.new(1, 0.04, 1),
10
+ 1 => Milk.new(1, 0.04, 1, ["Natural", "Chocolate", "Strawberry"]),
11
11
  }
12
12
 
13
13
  DAIRY = OpenStruct.new(
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: 0.9.5
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Mosolgo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-01 00:00:00.000000000 Z
11
+ date: 2015-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parslet
@@ -213,11 +213,14 @@ files:
213
213
  - lib/graphql/query/context.rb
214
214
  - lib/graphql/query/directive_chain.rb
215
215
  - lib/graphql/query/executor.rb
216
+ - lib/graphql/query/literal_input.rb
217
+ - lib/graphql/query/ruby_input.rb
216
218
  - lib/graphql/query/serial_execution.rb
217
219
  - lib/graphql/query/serial_execution/field_resolution.rb
218
220
  - lib/graphql/query/serial_execution/operation_resolution.rb
219
221
  - lib/graphql/query/serial_execution/selection_resolution.rb
220
222
  - lib/graphql/query/type_resolver.rb
223
+ - lib/graphql/query/variables.rb
221
224
  - lib/graphql/repl.rb
222
225
  - lib/graphql/scalar_type.rb
223
226
  - lib/graphql/schema.rb
@@ -227,6 +230,7 @@ files:
227
230
  - lib/graphql/schema/middleware_chain.rb
228
231
  - lib/graphql/schema/printer.rb
229
232
  - lib/graphql/schema/rescue_middleware.rb
233
+ - lib/graphql/schema/type_expression.rb
230
234
  - lib/graphql/schema/type_map.rb
231
235
  - lib/graphql/schema/type_reducer.rb
232
236
  - lib/graphql/schema/type_validator.rb
@@ -274,6 +278,8 @@ files:
274
278
  - spec/graphql/language/transform_spec.rb
275
279
  - spec/graphql/language/visitor_spec.rb
276
280
  - spec/graphql/object_type_spec.rb
281
+ - spec/graphql/query/base_execution/value_resolution_spec.rb
282
+ - spec/graphql/query/context_spec.rb
277
283
  - spec/graphql/query/executor_spec.rb
278
284
  - spec/graphql/query/type_resolver_spec.rb
279
285
  - spec/graphql/query_spec.rb
@@ -281,6 +287,7 @@ files:
281
287
  - spec/graphql/schema/middleware_chain_spec.rb
282
288
  - spec/graphql/schema/printer_spec.rb
283
289
  - spec/graphql/schema/rescue_middleware_spec.rb
290
+ - spec/graphql/schema/type_expression_spec.rb
284
291
  - spec/graphql/schema/type_reducer_spec.rb
285
292
  - spec/graphql/schema/type_validator_spec.rb
286
293
  - spec/graphql/schema_spec.rb
@@ -349,6 +356,8 @@ test_files:
349
356
  - spec/graphql/language/transform_spec.rb
350
357
  - spec/graphql/language/visitor_spec.rb
351
358
  - spec/graphql/object_type_spec.rb
359
+ - spec/graphql/query/base_execution/value_resolution_spec.rb
360
+ - spec/graphql/query/context_spec.rb
352
361
  - spec/graphql/query/executor_spec.rb
353
362
  - spec/graphql/query/type_resolver_spec.rb
354
363
  - spec/graphql/query_spec.rb
@@ -356,6 +365,7 @@ test_files:
356
365
  - spec/graphql/schema/middleware_chain_spec.rb
357
366
  - spec/graphql/schema/printer_spec.rb
358
367
  - spec/graphql/schema/rescue_middleware_spec.rb
368
+ - spec/graphql/schema/type_expression_spec.rb
359
369
  - spec/graphql/schema/type_reducer_spec.rb
360
370
  - spec/graphql/schema/type_validator_spec.rb
361
371
  - spec/graphql/schema_spec.rb