graphql-rb 0.0.6 → 0.0.7

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: 937f24e359a15a25d629f4b31ce3bece3339e88f
4
- data.tar.gz: 15030d0283c03ba88bad726e1592e688eafe92c2
3
+ metadata.gz: 9fc710142a46d8360f72c3e6ba5833c748862ed7
4
+ data.tar.gz: 2d59d675fd5ac22450c1dfb6330469c881f20f61
5
5
  SHA512:
6
- metadata.gz: 37c9f986ef04796ae4a4385d8c051064c1184803b92d30a3ee91b973e67b31d8ae18de18f53defab7ec0ea391e19a110f9a5fe3434adeba72015ac4846d90152
7
- data.tar.gz: 7f5136940b38fab58a8f9db8c4d64d26edfd2861f0f6b0eadda57c67237a004b5de58e32fde49d9ff7ecd78decf2e7878c7e7bad27d72a817f66f71704c48a7f
6
+ metadata.gz: b3c4e2b1c74c372b81ef766637784dc2f8be2c22e1d5efa87ed43201cab455fac49ed5c7392894fce7cd5ce5d8acc59c6c68449672b2a02aa4f10782201f9e46
7
+ data.tar.gz: 600d2484eb3ed46d0e8862b90143ac85d3ebceec0b0552925b8d266603383cf2615922f76e20aa09ba84fa0bf7125f0a11a4a5c783fd68de6dc0fb2f3b975906
@@ -5,7 +5,7 @@ module GraphQL
5
5
 
6
6
  class Pool
7
7
  def self.future(&block)
8
- _pool.future.perform(block)
8
+ pool.future.perform(block)
9
9
  end
10
10
 
11
11
  protected
@@ -17,12 +17,13 @@ module GraphQL
17
17
  value = block.call
18
18
  value = value.value if value.is_a?(Celluloid::Future)
19
19
  value
20
+ rescue Exception => e
21
+ e
20
22
  end
21
23
  end
22
24
 
23
- def self._pool
24
- Celluloid::Actor[pool_id] ||= Worker.pool#(as: pool_id)
25
- # Celluloid::Actor[pool_id]
25
+ def self.pool
26
+ Celluloid::Actor[pool_id] ||= Worker.pool
26
27
  end
27
28
 
28
29
  def self.pool_id
@@ -5,17 +5,16 @@ module GraphQL
5
5
 
6
6
  def evaluate(context)
7
7
  context[:variables] = materialize_variables(context[:schema], context[:params])
8
- type == 'mutation' ? execute_serially(context) : execute(context)
8
+ arguments = [
9
+ type == 'mutation' ? context[:schema].mutation_type : context[:schema].query_type,
10
+ type == 'mutation'
11
+ ]
12
+ execute(context, *arguments)
9
13
  end
10
14
 
11
15
 
12
- def execute(context)
13
- selection_set.evaluate(context, context[:schema].query_type, context[:root])
14
- end
15
-
16
-
17
- def execute_serially(context)
18
- raise "Not implemented. Yet."
16
+ def execute(context, type, serially = false)
17
+ selection_set.evaluate(context, type, context[:root], serially: serially)
19
18
  end
20
19
 
21
20
 
@@ -13,33 +13,63 @@ module GraphQL
13
13
  # + context[schema, document]
14
14
  #
15
15
  #
16
- def evaluate(context, object_type, object)
17
- collect_fields(context, object_type).reduce({}) do |memo, (key, fields)|
18
- field = fields.first
19
- field_definition = case
16
+ # def evaluate(context, object_type, object)
17
+ # collect_fields(context, object_type).reduce({}) do |memo, (key, fields)|
18
+ # field = fields.first
19
+ # field_definition = case
20
+ #
21
+ # when GraphQL::Introspection.meta_field?(field.name)
22
+ # GraphQL::Introspection.meta_field(field.name)
23
+ # else
24
+ # object_type.field(field.name)
25
+ # end
26
+ #
27
+ #
28
+ # memo[key.to_sym] = begin
29
+ # resolved_object = field.resolve(context, object_type, object)
30
+ #
31
+ # if resolved_object.is_a?(Celluloid::Future)
32
+ # Execution::Pool.future do
33
+ # complete_value(context, field_definition.type, resolved_object.value, merge_selection_sets(fields))
34
+ # end
35
+ # else
36
+ # complete_value(context, field_definition.type, resolved_object, merge_selection_sets(fields))
37
+ # end
38
+ #
39
+ # rescue Celluloid::TaskTerminated => e
40
+ # context[:errors] << "Field '#{field.name}' of '#{object_type}' error: #{e}"
41
+ # nil
42
+ # end unless field_definition.nil?
43
+ #
44
+ # memo
45
+ # end
46
+ # end
47
+
48
+
49
+ def evaluate(context, object_type, object, serially: false)
50
+ grouped_fields = collect_fields(context, object_type)
20
51
 
52
+ grouped_fields.reduce({}) do |memo, (key, fields)|
53
+
54
+ field = fields.first
55
+
56
+ field_definition = case
21
57
  when GraphQL::Introspection.meta_field?(field.name)
22
58
  GraphQL::Introspection.meta_field(field.name)
23
59
  else
24
60
  object_type.field(field.name)
25
61
  end
26
62
 
27
-
28
- memo[key.to_sym] = begin
29
- resolved_object = field.resolve(context, object_type, object)
30
-
31
- if resolved_object.is_a?(Celluloid::Future)
32
- Execution::Pool.future do
33
- complete_value(context, field_definition.type, resolved_object.value, merge_selection_sets(fields))
34
- end
35
- else
36
- complete_value(context, field_definition.type, resolved_object, merge_selection_sets(fields))
63
+ unless field_definition.nil?
64
+ context[:field_name] = field.name
65
+ value = Execution::Pool.future do
66
+ resolved_value = field.resolve(context, object_type, object)
67
+ resolved_value = resolved_value.value if resolved_value.is_a?(Celluloid::Future)
68
+ complete_value(context, field_definition.type, resolved_value, merge_selection_sets(fields))
37
69
  end
38
70
 
39
- rescue Celluloid::TaskTerminated => e
40
- context[:errors] << "Field '#{field.name}' of '#{object_type}' error: #{e}"
41
- nil
42
- end unless field_definition.nil?
71
+ memo[key.to_sym] = serially ? value.value : value
72
+ end
43
73
 
44
74
  memo
45
75
  end
@@ -109,6 +139,11 @@ module GraphQL
109
139
  def complete_value(context, field_type, resolved_object, selection_set)
110
140
  return nil if resolved_object.nil?
111
141
 
142
+ if resolved_object.is_a?(Exception)
143
+ context[:errors] << "Field '#{field_type}' of '#{context[:field_name]}' error: '#{resolved_object}'."
144
+ return nil
145
+ end
146
+
112
147
  case field_type
113
148
  when GraphQLNonNull
114
149
  completed_object = complete_value(context, field_type.of_type, resolved_object, selection_set)
@@ -1,3 +1,3 @@
1
1
  module GraphQL
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
@@ -0,0 +1,88 @@
1
+ require 'graphql'
2
+
3
+ RSpec.describe "Mutation Tests" do
4
+
5
+
6
+ TheNumber = Struct.new('Number', :value)
7
+
8
+ class TheNumber
9
+
10
+ def self.number
11
+ @number ||= TheNumber.new
12
+ end
13
+
14
+ end
15
+
16
+ NumberHolderType = GraphQL::GraphQLObjectType.new do
17
+ name 'NumberHolder'
18
+ field :value, GraphQL::GraphQLInt
19
+ end
20
+
21
+
22
+ QueryType = GraphQL::GraphQLObjectType.new do
23
+ name 'Query'
24
+ field :numberHolder, NumberHolderType
25
+ end
26
+
27
+
28
+ MutationType = GraphQL::GraphQLObjectType.new do
29
+ name 'Mutation'
30
+
31
+ field :immediatelyChangeTheNumber, type: NumberHolderType do
32
+ arg :newNumber, GraphQL::GraphQLInt
33
+
34
+ resolve lambda { |object, params|
35
+ TheNumber.number.value = params[:newNumber]
36
+ return TheNumber.number
37
+ }
38
+ end
39
+
40
+ field :futureChangeTheNumber, type: NumberHolderType do
41
+ arg :newNumber, GraphQL::GraphQLInt
42
+
43
+ resolve lambda { |object, params|
44
+ GraphQL::Execution::Pool.future do
45
+ raise "Cannot change the number"
46
+ TheNumber.number.value = params[:newNumber]
47
+ TheNumber.number
48
+ end
49
+ }
50
+ end
51
+ end
52
+
53
+
54
+ Schema = GraphQL::GraphQLSchema.new do
55
+
56
+ query QueryType
57
+ mutation MutationType
58
+
59
+ end
60
+
61
+
62
+
63
+ it "Should evaluate mutations serially" do
64
+ query = %q(
65
+ mutation M {
66
+ first: immediatelyChangeTheNumber(newNumber: 1) {
67
+ value
68
+ }
69
+ second: futureChangeTheNumber(newNumber: 2) {
70
+ value
71
+ }
72
+ third: immediatelyChangeTheNumber(newNumber: 3) {
73
+ value
74
+ }
75
+ fourth: futureChangeTheNumber(newNumber: 4) {
76
+ value
77
+ }
78
+ fifth: immediatelyChangeTheNumber(newNumber: 5) {
79
+ value
80
+ }
81
+ }
82
+ )
83
+
84
+ puts GraphQL.graphql(Schema, query, {}, { newNumber: 1 })
85
+ end
86
+
87
+
88
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugene Kovalev
@@ -155,6 +155,7 @@ files:
155
155
  - spec/introspection/full_spec.rb
156
156
  - spec/introspection/simple_spec.rb
157
157
  - spec/language/parser_spec.rb
158
+ - spec/mutation/mutation_spec.rb
158
159
  - spec/schema.rb
159
160
  - spec/spec_helper.rb
160
161
  - spec/type/enum_spec.rb
@@ -193,6 +194,7 @@ test_files:
193
194
  - spec/introspection/full_spec.rb
194
195
  - spec/introspection/simple_spec.rb
195
196
  - spec/language/parser_spec.rb
197
+ - spec/mutation/mutation_spec.rb
196
198
  - spec/schema.rb
197
199
  - spec/spec_helper.rb
198
200
  - spec/type/enum_spec.rb