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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3613d8a2bc521ba1e8c8cdcc120b72ac56b5d6db12ac829c21d608605164aef4
4
- data.tar.gz: 8365841223a6f4390e8fdbd870d5f3a48d1982b69dba3d1eb05b385dd54eb509
3
+ metadata.gz: 1bb023539d96953816444d9bfb1c00a93143e7bf78bb6bd01fbdc90a2c8f9c52
4
+ data.tar.gz: fa272ef8fc02dd009221281694d1f567c4a3d3ef62a45d0129e5477cb145ba37
5
5
  SHA512:
6
- metadata.gz: 3bb630bcffe4434a46f1e9eeba4ef1f601f6dc77bc0bd1df8089249141b4997e7afc5e8ea8bd018e415cf02ba1b9f1efbef9f86ffe20b4f70bfd9231767fc3f4
7
- data.tar.gz: '09c3d6d3967e433b58746f125ec9071024fe18609f42d91cee150c88017ec63d0c15abd4d0102f19ab042ca3f812298f86482d9575139248dd5ce4b5fb0e3b4a'
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
- DateTime.parse(val)
179
+ begin
180
+ DateTime.parse(val)
181
+ rescue
182
+ val
183
+ end
178
184
  elsif sym_type == :date
179
- Date.parse(val)
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
@@ -1,7 +1,7 @@
1
1
  module Graphql
2
2
  module Rails
3
3
  module Api
4
- VERSION = "0.9.5".freeze
4
+ VERSION = "0.9.6".freeze
5
5
  end
6
6
  end
7
7
  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.5
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-03 00:00:00.000000000 Z
11
+ date: 2022-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: graphql