graphql-rb 0.0.6 → 0.0.7

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: 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