graphql 0.10.1 → 0.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5651b5fa2ec7dde473a9747b9899bcb99a71b1d5
4
- data.tar.gz: a3c045b8d41109f2867090f68c0868eb68671d55
3
+ metadata.gz: a8c997dbb80987c2b0312c95913b8cb7bef898be
4
+ data.tar.gz: f77f1a3b90d96887a93ee560f8dd5ba5370a4453
5
5
  SHA512:
6
- metadata.gz: e4ca9364a51bc9d85927d3a00f9d06514a386a482078366167f647eb483455d0bb052041a921f0c107e84cb872a26343d26684c6c625a5fcc8ba19132191ffae
7
- data.tar.gz: 6c60beeafb45f1246293c4aa559e04a0240ca1e2a9d82f3323f3a34320bd2d5703f3b38aa647ad21b57128a9121cb9ec2a1c213dd0d42400a1bce801a3da31f0
6
+ metadata.gz: 4f20614f4bcefc6ed7771c516046ae24581785ea25579e0bd5a8bdcad1cbd7d5eca7c981e59b4eec08bb54772cdb15c3f5f44f62eee1ea51d224e2c87608c821
7
+ data.tar.gz: a525157abbc09c4b1abd6e55a18b975305dbb93d8583709850bc159cb2e7d87ee62dd3b3d7fddf9188daa3e6c07f1bb83f2c8715c921c8b12b1e898e823dfbf0
@@ -97,7 +97,7 @@ module GraphQL
97
97
  rule(:value_input_object) { str("{") >> space? >> value_input_object_pair.repeat(1).as(:input_object) >> space? >> str("}") }
98
98
  rule(:value_input_object_pair) { space? >> name.as(:input_object_name) >> space? >> str(":") >> space? >> value.as(:input_object_value) >> separator? }
99
99
  rule(:value_int) { (value_sign? >> match('\d').repeat(1)).as(:int) }
100
- rule(:value_string) { str('"') >> value_string_char.repeat.as(:string) >> str('"')}
100
+ rule(:value_string) { str('"') >> value_string_char.repeat.maybe.as(:optional_string_content).as(:string) >> str('"')}
101
101
  rule(:value_string_char) { value_string_escaped_char | value_string_escaped_unicode | value_string_source_char}
102
102
  rule(:value_string_escaped_char) { str("\\") >> match('["\/bfnrt]') }
103
103
  rule(:value_string_escaped_unicode) { str("\\") >> match('u[\dA-Fa-f]{4}')}
@@ -110,6 +110,7 @@ module GraphQL
110
110
  string.gsub!(UTF_8, &UTF_8_REPLACE)
111
111
  string
112
112
  }
113
+ rule(optional_string_content: simple(:v)) { v.to_s }
113
114
  rule(variable: simple(:v)) { create_node(:VariableIdentifier, name: v.to_s, position_source: v) }
114
115
  rule(enum: simple(:v)) { create_node(:Enum, name: v.to_s, position_source: v)}
115
116
  end
@@ -4,7 +4,6 @@ class GraphQL::Schema::TypeReducer
4
4
  attr_reader :type, :existing_type_hash
5
5
 
6
6
  def initialize(type, existing_type_hash)
7
- type = type.nil? ? nil : type.unwrap
8
7
  validate_type(type)
9
8
  if type.respond_to?(:name) && existing_type_hash.fetch(type.name, nil).equal?(type)
10
9
  @result = existing_type_hash
@@ -58,7 +57,10 @@ class GraphQL::Schema::TypeReducer
58
57
  end
59
58
 
60
59
  def reduce_type(type, type_hash)
61
- self.class.new(type, type_hash).result
60
+ unless type.is_a?(GraphQL::BaseType)
61
+ raise GraphQL::Schema::InvalidTypeError.new(type, ["Must be a GraphQL::BaseType"])
62
+ end
63
+ self.class.new(type.unwrap, type_hash).result
62
64
  end
63
65
 
64
66
  def validate_type(type)
@@ -1,3 +1,3 @@
1
1
  module GraphQL
2
- VERSION = "0.10.1"
2
+ VERSION = "0.10.2"
3
3
  end
data/readme.md CHANGED
@@ -8,7 +8,11 @@
8
8
 
9
9
  A Ruby implementation of [GraphQL](http://graphql.org/).
10
10
 
11
- - [Introduction](https://github.com/rmosolgo/graphql-ruby/blob/master/guides/introduction.md)
11
+ - Guides
12
+ - [Introduction](https://github.com/rmosolgo/graphql-ruby/blob/master/guides/introduction.md)
13
+ - [Defining Your Schema](https://github.com/rmosolgo/graphql-ruby/blob/master/guides/defining_your_schema.md)
14
+ - [Executing Queries](https://github.com/rmosolgo/graphql-ruby/blob/master/guides/executing_queries.md)
15
+
12
16
  - [API Documentation](http://www.rubydoc.info/github/rmosolgo/graphql-ruby)
13
17
 
14
18
  ## Installation
@@ -68,7 +68,7 @@ describe GraphQL::Language::Parser do
68
68
  assert(parser.field.parse_with_debug(%|myField { name, id }|), 'gets subselections')
69
69
  assert(parser.field.parse_with_debug(%{myAlias: myField}), 'gets an alias')
70
70
  assert(parser.field.parse_with_debug(%{myField(intKey: 1, floatKey: 1.1e5)}), 'gets arguments')
71
- assert(parser.field.parse_with_debug('myAlias: myField(stringKey: "\"my_string\"", boolKey: false, objKey: { key : true }, otherObjKey: {key: true})'), 'gets alias and arguments')
71
+ assert(parser.field.parse_with_debug('myAlias: myField(stringKey: "\"my_string\"", emptyStringKey: "", boolKey: false, objKey: { key : true }, otherObjKey: {key: true})'), 'gets alias and arguments')
72
72
  assert(parser.field.parse_with_debug(%|myField @withFlag, @skip(if: true) { name, id }|), 'gets with directive')
73
73
  end
74
74
 
@@ -88,7 +88,7 @@ describe GraphQL::Language::Transform do
88
88
  end
89
89
 
90
90
  it 'transforms fields' do
91
- res = get_result(%|best_pals: friends(first: 3, coolnessLevel: SO_COOL, query: {nice: {very: true}})|, parse: :field)
91
+ res = get_result(%|best_pals: friends(first: 3, coolnessLevel: SO_COOL, query: {nice: {very: true}}, emptyStr: "")|, parse: :field)
92
92
  assert_equal(GraphQL::Language::Nodes::Field, res.class)
93
93
  assert_equal(1, res.line)
94
94
  assert_equal(1, res.col)
@@ -51,10 +51,22 @@ describe GraphQL::Schema::TypeReducer do
51
51
  end
52
52
  }
53
53
 
54
- it 'raises an InvalidTypeError' do
54
+ let(:another_invalid_type) {
55
+ GraphQL::ObjectType.define do
56
+ name "AnotherInvalidType"
57
+ field :someField, String
58
+ end
59
+ }
60
+
61
+ it 'raises an InvalidTypeError when passed nil' do
55
62
  reducer = GraphQL::Schema::TypeReducer.new(invalid_type, {})
56
63
  assert_raises(GraphQL::Schema::InvalidTypeError) { reducer.result }
57
64
  end
65
+
66
+ it 'raises an InvalidTypeError when passed an object that isnt a GraphQL::BaseType' do
67
+ reducer = GraphQL::Schema::TypeReducer.new(another_invalid_type, {})
68
+ assert_raises(GraphQL::Schema::InvalidTypeError) { reducer.result }
69
+ end
58
70
  end
59
71
 
60
72
  describe 'when a schema has multiple types with the same name' do
@@ -0,0 +1,73 @@
1
+ # This GraphQL Schema performs operations on numbers.
2
+ # It can perform operations on values you give it and return values
3
+ # It also maintains some state which can be updated or read
4
+
5
+ # You can reduce a list of values to a single value
6
+ REDUCERS = {
7
+ "SUM" => -> (values) { [values.inject(&:+)] },
8
+ "MAX" => :max.to_proc,
9
+ "MIN" => :min.to_proc,
10
+ }
11
+
12
+ ReducerEnum = GraphQL::EnumType.define do
13
+ REDUCERS.map do |op_name, op_proc|
14
+ value(op_name)
15
+ end
16
+ end
17
+
18
+ # You can make a new list by transforming each member
19
+ MAPPERS = {
20
+ "ADD" => -> (val, arg) { val + arg },
21
+ "SUB" => -> (val, arg) { val - arg },
22
+ "EQ" => -> (val, arg) { val == arg ? 1 : 0},
23
+ }
24
+
25
+ MapperEnum = GraphQL::EnumType.define do
26
+ MAPPERS.map do |op_name, op_proc|
27
+ value(op_name)
28
+ end
29
+ end
30
+
31
+ # Input a list of integers
32
+ ListOfInts = GraphQL::INT_TYPE.to_list_type
33
+
34
+ # Expose a list of values and perform operations
35
+ ValuesType = GraphQL::ObjectType.define do
36
+ field :values, ListOfInts do
37
+ resolve -> (obj, _args, _ctx) { obj }
38
+ end
39
+
40
+ # Get a single value based on the values in this list
41
+ field :reduce, types.Int do
42
+ argument :operation, !ReducerEnum
43
+ resolve -> (obj, args, ctx) {
44
+ reduce_name = args[:operation]
45
+ reduce_fn = REDUCERS[reduce_name]
46
+ reduce_fn.call(obj)
47
+ }
48
+ end
49
+
50
+ # Handle self-referential fields by wrapping the type in a proc.
51
+ # It will be lazy-eval'ed
52
+ field :map, -> { ValuesType } do
53
+ argument :operation, !MapperEnum
54
+ argument :argument, !types.Int
55
+ resolve -> (obj, args, ctx) {
56
+ op_arg = args[:argument]
57
+ op_name = args[:operation]
58
+ op_func = MAPPERS[op_name]
59
+ obj.map { |item| op_func.call(item, op_arg) }
60
+ }
61
+ end
62
+ end
63
+
64
+ QueryType = GraphQL::ObjectType.define do
65
+ name("Query")
66
+
67
+ field :perform, ValuesType do
68
+ argument :initial, !ListOfInts
69
+ resolve -> (obj, args, ctx) { args[:initial] }
70
+ end
71
+ end
72
+
73
+ CalculatorSchema = GraphQL::Schema.new(query: QueryType)
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.10.1
4
+ version: 0.10.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: 2015-10-22 00:00:00.000000000 Z
11
+ date: 2015-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parslet
@@ -313,6 +313,7 @@ files:
313
313
  - spec/graphql/static_validation/validator_spec.rb
314
314
  - spec/graphql/union_type_spec.rb
315
315
  - spec/spec_helper.rb
316
+ - spec/support/calculator_schema.rb
316
317
  - spec/support/dairy_app.rb
317
318
  - spec/support/dairy_data.rb
318
319
  - spec/support/star_wars_data.rb
@@ -394,6 +395,7 @@ test_files:
394
395
  - spec/graphql/static_validation/validator_spec.rb
395
396
  - spec/graphql/union_type_spec.rb
396
397
  - spec/spec_helper.rb
398
+ - spec/support/calculator_schema.rb
397
399
  - spec/support/dairy_app.rb
398
400
  - spec/support/dairy_data.rb
399
401
  - spec/support/star_wars_data.rb