graphql-rails-resolver 0.2.5 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +25 -0
- data/lib/graphql/rails/resolver.rb +33 -15
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ef4cb840bbd737f5fe330cbc66ced0223beb614
|
4
|
+
data.tar.gz: 7eee317b609f529c10f48e59cd44ffef05af1776
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc822cad0c39a550e12678cef7224a2f4925bee0a45a5730eed08145b041c323d3c733eb21714ace5392a28a068d50ccf4d4f439d2a9ab177512ea3f12a12ccb
|
7
|
+
data.tar.gz: 9d4b16ab71ffcff4d036b349ec98959b8163488a73abb7cfb4ecf7dad2790ee25f17ed2a2e4beabb49dbc1ec070df3e15d10e2f83b3d5233ce30a9ee8c9c533e
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
# GraphQL::Rails::Resolver
|
2
2
|
## CHANGELOG
|
3
3
|
|
4
|
+
### Version 0.2.7
|
5
|
+
Added conditional resolution by means of `:if` and `:unless` options
|
6
|
+
|
7
|
+
### Version 0.2.6
|
8
|
+
Fixes issue where resolution may skip over :where
|
9
|
+
|
4
10
|
### Version 0.2.5
|
5
11
|
Adds heirarchal resolution strategy
|
6
12
|
|
data/README.md
CHANGED
@@ -92,6 +92,9 @@ class Post < GraphQL::Rails::Resolver
|
|
92
92
|
resolve :title
|
93
93
|
resolve :createdAt, :where => :created_at
|
94
94
|
resolve :updatedAt, :where => :updated_at
|
95
|
+
|
96
|
+
# Condition resolution on title being present using the `unless` option
|
97
|
+
resolve :title, unless: -> (value) { value.blank? }
|
95
98
|
|
96
99
|
# Resolve :featured argument with default test: if argument `featured` is present
|
97
100
|
resolve :featured, :scope => :featured
|
@@ -127,7 +130,28 @@ In the examples above, the three primary arguments to `resolve` are:
|
|
127
130
|
|
128
131
|
Alternatively you can specify a symbol representing a method name: (ie: `resolve :arg_1, :custom_method`). The resolver will use it's own method if it exists, or else it will call the method on the object itself.
|
129
132
|
|
133
|
+
### Conditional resolution
|
134
|
+
Sometimes it is necessary to condition resolution of an argument on its value. For instance, by default
|
135
|
+
an empty string as an argument matches only records whose corresponding field is an empty string as well.
|
136
|
+
However, you may want an empty argument to mean that this argument should be ignored and all records shall
|
137
|
+
be matched. To achieve this, you would condition resolution of that argument on it being not empty.
|
138
|
+
|
139
|
+
You can condition resolution by passing the `:if` or `:unless` option to the `resolve` method. This option
|
140
|
+
can take a method name (as a symbol or a string), or a `Proc` (or lambda expression for that matter), which
|
141
|
+
will be called with the argument's value:
|
130
142
|
|
143
|
+
```
|
144
|
+
resolve :tagline, unless: -> (value) { value.blank? }
|
145
|
+
|
146
|
+
resolve :tagline, if: -> (value) { value.present? }
|
147
|
+
|
148
|
+
resolve :tagline, if: :check_value
|
149
|
+
|
150
|
+
def check_value(value)
|
151
|
+
value.present?
|
152
|
+
end
|
153
|
+
```
|
154
|
+
|
131
155
|
|
132
156
|
|
133
157
|
### Detecting the Model
|
@@ -162,3 +186,4 @@ I wanted to release this utility for the hopes of sparking interest in Rails int
|
|
162
186
|
# Credits
|
163
187
|
- Cole Turner ([@colepatrickturner](https://github.com/colepatrickturner))
|
164
188
|
- Peter Salanki ([@salanki](https://github.com/salanki))
|
189
|
+
- Jonas Schwertfeger ([@jschwertfeger](https://github.com/jschwertfeger))
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module GraphQL
|
2
2
|
module Rails
|
3
3
|
class Resolver
|
4
|
-
VERSION = '0.2.
|
4
|
+
VERSION = '0.2.7'
|
5
5
|
|
6
6
|
attr_accessor :resolvers
|
7
7
|
|
@@ -48,6 +48,9 @@ module GraphQL
|
|
48
48
|
value = args[arg]
|
49
49
|
|
50
50
|
resolvers.each do |method, params|
|
51
|
+
next unless condition_met?(params.fetch(:if, nil), true, value)
|
52
|
+
next unless condition_met?(params.fetch(:unless, nil), false, value)
|
53
|
+
|
51
54
|
# Match scopes
|
52
55
|
if params.key? :scope
|
53
56
|
scope_name = params[:scope]
|
@@ -74,7 +77,8 @@ module GraphQL
|
|
74
77
|
else
|
75
78
|
raise ArgumentError, "Unable to resolve parameter of type #{method.class} in #{self}"
|
76
79
|
end
|
77
|
-
|
80
|
+
else
|
81
|
+
# Resolve ID arguments
|
78
82
|
if is_arg_id_type? arg
|
79
83
|
value = resolve_id(value)
|
80
84
|
end
|
@@ -83,7 +87,7 @@ module GraphQL
|
|
83
87
|
@result = send(arg, value)
|
84
88
|
elsif @result.respond_to? arg and params[:where].present? == false
|
85
89
|
@result = @result.send(arg, value)
|
86
|
-
|
90
|
+
elsif @result.respond_to? :where
|
87
91
|
attribute =
|
88
92
|
if params[:where].present?
|
89
93
|
params[:where]
|
@@ -91,12 +95,16 @@ module GraphQL
|
|
91
95
|
arg
|
92
96
|
end
|
93
97
|
|
98
|
+
unless @result.has_attribute?(attribute)
|
99
|
+
raise ArgumentError, "Unable to resolve attribute #{attribute} on #{@result}"
|
100
|
+
end
|
101
|
+
|
94
102
|
hash = {}
|
95
103
|
hash[attribute] = value
|
96
104
|
@result = @result.where(hash)
|
105
|
+
else
|
106
|
+
raise ArgumentError, "Unable to resolve argument #{arg} in #{self}"
|
97
107
|
end
|
98
|
-
else
|
99
|
-
raise ArgumentError, "Unable to resolve argument #{arg} in #{self}"
|
100
108
|
end
|
101
109
|
end
|
102
110
|
end
|
@@ -188,6 +196,16 @@ module GraphQL
|
|
188
196
|
end
|
189
197
|
end
|
190
198
|
|
199
|
+
def condition_met?(conditional, expectation, value)
|
200
|
+
if conditional.respond_to? :call
|
201
|
+
conditional.call(value) == expectation
|
202
|
+
elsif (conditional.is_a?(Symbol) || conditional.is_a?(String)) && self.respond_to?(conditional)
|
203
|
+
self.send(conditional, value) == expectation
|
204
|
+
else
|
205
|
+
true
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
191
209
|
class << self
|
192
210
|
@@id_field = :id
|
193
211
|
|
@@ -201,28 +219,28 @@ module GraphQL
|
|
201
219
|
@resolvers
|
202
220
|
end
|
203
221
|
|
204
|
-
def resolve(
|
222
|
+
def resolve(arg, definition=nil, **otherArgs)
|
205
223
|
@resolvers ||= {}
|
206
|
-
@resolvers[
|
207
|
-
@resolvers[
|
224
|
+
@resolvers[arg] ||= []
|
225
|
+
@resolvers[arg].push([definition, otherArgs])
|
208
226
|
end
|
209
227
|
|
210
|
-
def resolve_where(
|
228
|
+
def resolve_where(arg)
|
211
229
|
warn "[DEPRECATION] `resolve_where` is deprecated. Please use `resolve` instead."
|
212
|
-
resolve(
|
230
|
+
resolve(arg)
|
213
231
|
end
|
214
232
|
|
215
|
-
def resolve_scope(
|
233
|
+
def resolve_scope(arg, test=nil, scope_name: nil, with_value: false)
|
216
234
|
warn "[DEPRECATION] `resolve_scope` is deprecated. Please use `resolve` instead."
|
217
235
|
test = lambda { |value| value.present? } if test.nil?
|
218
|
-
scope_name =
|
236
|
+
scope_name = arg if scope_name.nil?
|
219
237
|
|
220
|
-
resolve(
|
238
|
+
resolve(arg, :scope => -> (value) { test.call(value) ? scope_name : nil }, :with_value => with_value)
|
221
239
|
end
|
222
240
|
|
223
|
-
def resolve_method(
|
241
|
+
def resolve_method(arg)
|
224
242
|
warn "[DEPRECATION] `resolve_method` is deprecated. Please use `resolve` instead."
|
225
|
-
resolve(
|
243
|
+
resolve(arg)
|
226
244
|
end
|
227
245
|
end
|
228
246
|
end
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-rails-resolver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cole Turner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: graphql
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.19.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.19.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
description: A utility for ease graphql-ruby integration into a Rails project.
|
@@ -44,11 +44,11 @@ executables: []
|
|
44
44
|
extensions: []
|
45
45
|
extra_rdoc_files: []
|
46
46
|
files:
|
47
|
-
-
|
47
|
+
- lib/graphql/rails/resolver.rb
|
48
|
+
- lib/graphql/rails.rb
|
48
49
|
- LICENSE
|
49
50
|
- README.md
|
50
|
-
-
|
51
|
-
- lib/graphql/rails/resolver.rb
|
51
|
+
- CHANGELOG.md
|
52
52
|
homepage: http://rubygems.org/gems/graphql-rails-resolver
|
53
53
|
licenses:
|
54
54
|
- MIT
|
@@ -59,17 +59,17 @@ require_paths:
|
|
59
59
|
- lib
|
60
60
|
required_ruby_version: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
|
-
- -
|
62
|
+
- - '>='
|
63
63
|
- !ruby/object:Gem::Version
|
64
64
|
version: 2.3.0
|
65
65
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - '>='
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
requirements: []
|
71
71
|
rubyforge_project:
|
72
|
-
rubygems_version: 2.
|
72
|
+
rubygems_version: 2.0.14.1
|
73
73
|
signing_key:
|
74
74
|
specification_version: 4
|
75
75
|
summary: GraphQL + Rails integration for Field Resolvers.
|