graphql 0.10.1 → 0.10.2

Sign up to get free protection for your applications and to get access to all the features.
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