graphql-rails-api 0.9.5 → 0.9.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/graphql/hydrate_query.rb +62 -5
- data/lib/graphql/rails/api/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bb023539d96953816444d9bfb1c00a93143e7bf78bb6bd01fbdc90a2c8f9c52
|
4
|
+
data.tar.gz: fa272ef8fc02dd009221281694d1f567c4a3d3ef62a45d0129e5477cb145ba37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d72815cf15edf05a92ac0c49752acebb7f390999232caec1d7960b8d486f96b27e2a1cce616470e7627814a6f5161101a2c7f0c5af6d741d52186fe7371fe587
|
7
|
+
data.tar.gz: dc1a6d286bf8cfe6d6a2a2bb2398906f0ee860079d7acf46f88134dba05aa2775f227506fa978d05b696ac320357d9e8e653c313761a03cb55a9422e3b43b07d
|
@@ -58,7 +58,7 @@ module Graphql
|
|
58
58
|
return if @order_by.blank?
|
59
59
|
|
60
60
|
sign = @order_by.split(" ").last.downcase == "desc" ? "desc" : "asc"
|
61
|
-
column = @order_by.split(" ").first.strip
|
61
|
+
column = @order_by.split(" ").first.strip.underscore
|
62
62
|
|
63
63
|
if column.include?(".")
|
64
64
|
associated_model = column.split(".").first
|
@@ -120,6 +120,8 @@ module Graphql
|
|
120
120
|
handle_LessNode(node, model)
|
121
121
|
elsif node.instance_of?(RKelly::Nodes::GreaterNode)
|
122
122
|
handle_GreaterNode(node, model)
|
123
|
+
elsif node.instance_of?(RKelly::Nodes::ModulusNode)
|
124
|
+
handle_ModulusNode(node, model)
|
123
125
|
else
|
124
126
|
raise GraphQL::ExecutionError, "Invalid filter: #{node.class} unknown operator"
|
125
127
|
end
|
@@ -174,9 +176,17 @@ module Graphql
|
|
174
176
|
if node.instance_of?(RKelly::Nodes::StringNode)
|
175
177
|
val = node.value.gsub(/^'|'$|^"|"$/, "")
|
176
178
|
if sym_type == :datetime
|
177
|
-
|
179
|
+
begin
|
180
|
+
DateTime.parse(val)
|
181
|
+
rescue
|
182
|
+
val
|
183
|
+
end
|
178
184
|
elsif sym_type == :date
|
179
|
-
|
185
|
+
begin
|
186
|
+
DateTime.parse(val)
|
187
|
+
rescue
|
188
|
+
val
|
189
|
+
end
|
180
190
|
elsif sym_type == :integer
|
181
191
|
# Enums are handled here : We are about to compare a string with an integer column
|
182
192
|
# If the symbol and the value correspond to an existing enum into the model
|
@@ -208,6 +218,7 @@ module Graphql
|
|
208
218
|
|
209
219
|
def handle_NotEqualNode(node, model)
|
210
220
|
arel_field, model, type, value = handle_operator_node(node, model)
|
221
|
+
arel_field.name = arel_field.name.underscore
|
211
222
|
|
212
223
|
if value.nil?
|
213
224
|
model.where.not(arel_field.eq(nil))
|
@@ -220,6 +231,7 @@ module Graphql
|
|
220
231
|
|
221
232
|
def handle_NotStrictEqualNode(node, model)
|
222
233
|
arel_field, model, type, value = handle_operator_node(node, model)
|
234
|
+
arel_field.name = arel_field.name.underscore
|
223
235
|
|
224
236
|
if value.nil?
|
225
237
|
model.where.not(arel_field.eq(nil))
|
@@ -232,6 +244,7 @@ module Graphql
|
|
232
244
|
|
233
245
|
def handle_EqualNode(node, model)
|
234
246
|
arel_field, model, type, value = handle_operator_node(node, model)
|
247
|
+
arel_field.name = arel_field.name.underscore
|
235
248
|
|
236
249
|
if value.nil?
|
237
250
|
model.where(arel_field.eq(nil))
|
@@ -244,6 +257,7 @@ module Graphql
|
|
244
257
|
|
245
258
|
def handle_StrictEqualNode(node, model)
|
246
259
|
arel_field, model, type, value = handle_operator_node(node, model)
|
260
|
+
arel_field.name = arel_field.name.underscore
|
247
261
|
|
248
262
|
if value.nil?
|
249
263
|
model.where(arel_field.eq(nil))
|
@@ -256,24 +270,68 @@ module Graphql
|
|
256
270
|
|
257
271
|
def handle_GreaterOrEqualNode(node, model)
|
258
272
|
arel_field, model, type, value = handle_operator_node(node, model)
|
273
|
+
arel_field.name = arel_field.name.underscore
|
274
|
+
|
259
275
|
model.where(arel_field.gteq(value))
|
260
276
|
end
|
261
277
|
|
262
278
|
def handle_LessOrEqualNode(node, model)
|
263
279
|
arel_field, model, type, value = handle_operator_node(node, model)
|
280
|
+
arel_field.name = arel_field.name.underscore
|
281
|
+
|
264
282
|
model.where(arel_field.lteq(value))
|
265
283
|
end
|
266
284
|
|
267
285
|
def handle_LessNode(node, model)
|
268
286
|
arel_field, model, type, value = handle_operator_node(node, model)
|
287
|
+
arel_field.name = arel_field.name.underscore
|
288
|
+
|
269
289
|
model.where(arel_field.lt(value))
|
270
290
|
end
|
271
291
|
|
272
292
|
def handle_GreaterNode(node, model)
|
273
293
|
arel_field, model, type, value = handle_operator_node(node, model)
|
294
|
+
arel_field.name = arel_field.name.underscore
|
295
|
+
|
274
296
|
model.where(arel_field.gt(value))
|
275
297
|
end
|
276
298
|
|
299
|
+
# Example: "US" should match "US" and "USA" and "AUS"
|
300
|
+
def handle_ModulusNode(node, model)
|
301
|
+
arel_field, model, type, value = handle_operator_node(node, model)
|
302
|
+
arel_field.name = arel_field.name.underscore
|
303
|
+
|
304
|
+
if value.nil?
|
305
|
+
model.where(arel_field.eq(nil))
|
306
|
+
elsif type == :text || type == :string
|
307
|
+
model.where(arel_field.matches("%" + sanitize_sql_like(value) + "%"))
|
308
|
+
elsif type == :datetime
|
309
|
+
if value.instance_of?(DateTime)
|
310
|
+
model.where(arel_field.gteq(value).and(arel_field.lteq(value + 1.day)))
|
311
|
+
else
|
312
|
+
model.where(
|
313
|
+
Arel::Nodes::NamedFunction.new(
|
314
|
+
"CAST",
|
315
|
+
[Arel::Nodes::As.new(arel_field, Arel::Nodes::SqlLiteral.new("text"))]
|
316
|
+
).matches("%" + sanitize_sql_like(value) + "%")
|
317
|
+
)
|
318
|
+
end
|
319
|
+
elsif type == :uuid
|
320
|
+
model.where(
|
321
|
+
Arel::Nodes::NamedFunction.new(
|
322
|
+
"CAST",
|
323
|
+
[Arel::Nodes::As.new(arel_field, Arel::Nodes::SqlLiteral.new("text"))]
|
324
|
+
).matches("%" + sanitize_sql_like(value) + "%")
|
325
|
+
)
|
326
|
+
else
|
327
|
+
model.where(arel_field.eq(value))
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
331
|
+
def uuid_to_string(uuid)
|
332
|
+
uuid.delete("-")
|
333
|
+
end
|
334
|
+
|
277
335
|
def valid_id?(id)
|
278
336
|
valid_uuid?(id) || id.is_a?(Integer)
|
279
337
|
end
|
@@ -291,7 +349,7 @@ module Graphql
|
|
291
349
|
end
|
292
350
|
|
293
351
|
def get_field_type!(model, field_name)
|
294
|
-
field = model.column_for_attribute(field_name.to_sym)
|
352
|
+
field = model.column_for_attribute(field_name.underscore.to_sym)
|
295
353
|
unless field.present?
|
296
354
|
raise GraphQL::ExecutionError, "Invalid filter: #{field_name} is not a field of #{model}"
|
297
355
|
end
|
@@ -401,5 +459,4 @@ module Graphql
|
|
401
459
|
@model.class.to_s.split("::").first.underscore.pluralize
|
402
460
|
end
|
403
461
|
end
|
404
|
-
|
405
462
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-rails-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- poilon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-11-
|
11
|
+
date: 2022-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: graphql
|