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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fc710142a46d8360f72c3e6ba5833c748862ed7
|
4
|
+
data.tar.gz: 2d59d675fd5ac22450c1dfb6330469c881f20f61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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.
|
24
|
-
Celluloid::Actor[pool_id] ||= Worker.pool
|
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
|
-
|
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[:
|
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
|
-
|
18
|
-
|
19
|
-
|
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
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
-
|
40
|
-
|
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)
|
data/lib/graphql/version.rb
CHANGED
@@ -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.
|
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
|