fetcheable_on_api 0.2.4 → 0.2.5

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: c7d843ccd29700f0df6ed039ec4893090e1e2bff8a55af69587f8e7bc5f5e48c
4
- data.tar.gz: 7341967166c54c6aa67749134549dc80c19310f2da7d8ab54f26bdb88700ba3e
3
+ metadata.gz: c6219549e8a0f5504952d5ef35cefff9cc5e4fecc5a0999d63e9d27f5af9f0e6
4
+ data.tar.gz: 9ccff3a7b58b450aa033659bd5ad5378541c204340d57aa09433edcca08c1b12
5
5
  SHA512:
6
- metadata.gz: efeae3bd587ef064d38fe8842f22f629f3c997d1b68f1f0fe07553f1ca2bc7a471460a42c4555da8be39ab7c8f40f740536c44f7e4716f853655a382c461ad39
7
- data.tar.gz: 6687cf7ef721085c338ab4064954a2fc694df9960214881e1cd62564b37a78fd0ad0d974fbfa27ffee550bd183434944404ce9db88cefde7042271df8fb110b1
6
+ metadata.gz: ec44cfa6a0ed5e2d0993b7e4527113c65a79386ed3e7f5047990a7d4e4c01cd3c8205451319fe3398056c8b566222973e52f0d4f15dc9b1d6f54c7c918131720
7
+ data.tar.gz: 56439e23285b03eb1218cb5538f798efda9e4317a324c052ce7e9d82a56b9bc5968b26d4a7111222a75e985fb89773fa1f4cc3443226a40cdad2973877bbda2b
data/README.md CHANGED
@@ -152,6 +152,7 @@ class QuestionsController < ActionController::Base
152
152
  end
153
153
  end
154
154
  ```
155
+
155
156
  This allows you to pass a new parameter in the query:
156
157
 
157
158
  ```bash
@@ -184,6 +185,7 @@ $ curl -X GET \
184
185
  ```
185
186
 
186
187
  FetcheableOnApi support multiple sort fields by allowing comma-separated (U+002C COMMA, “,”) sort fields:
188
+
187
189
  ```ruby
188
190
  class QuestionsController < ActionController::Base
189
191
  #
@@ -308,6 +310,59 @@ $ curl -X GET \
308
310
  ]
309
311
  ```
310
312
 
313
+ Furthermore you can sort on `lowered` attributes using the `:lower` option:
314
+
315
+ ```ruby
316
+ class QuestionsController < ActionController::Base
317
+ #
318
+ # FetcheableOnApi
319
+ #
320
+ sort_by :answer, lower: true
321
+
322
+ # GET /questions
323
+ def index
324
+ questions = apply_fetcheable(Question.joins(:answer).includes(:answer).all)
325
+ render json: questions
326
+ end
327
+ end
328
+ ```
329
+
330
+ ```bash
331
+ $ curl -X GET \
332
+ 'http://localhost:3000/questions?sort=position'
333
+
334
+ [
335
+ {
336
+ "id": 3,
337
+ "position": 1,
338
+ "category_id": 1,
339
+ "content": "How to simply sort a collection with this gem ?",
340
+ "answer": "Just add sort_by in your controller and call the apply_fetcheable method"
341
+ },
342
+ {
343
+ "id": 6,
344
+ "position": 4,
345
+ "category_id": 1,
346
+ "content": "Why am I here?",
347
+ "answer": "just to demonstrate lowered sort",
348
+ },
349
+ {
350
+ "id": 4,
351
+ "position": 2,
352
+ "category_id": 2,
353
+ "content": "Is it so simple?",
354
+ "answer": "Yes"
355
+ },
356
+ {
357
+ "id": 5,
358
+ "position": 3,
359
+ "category_id": 2,
360
+ "content": "Is this real life?",
361
+ "answer": "Yes this is real life"
362
+ }
363
+ ]
364
+ ```
365
+
311
366
  ### Pagination
312
367
 
313
368
  Pagination is automatically set on the controller and allows the use of a new parameter `page`.
@@ -7,8 +7,8 @@ module FetcheableOnApi
7
7
  # Supports
8
8
  #
9
9
  SORT_ORDER = {
10
- '+' => :asc,
11
- '-' => :desc
10
+ "+" => :asc,
11
+ "-" => :desc,
12
12
  }.freeze
13
13
 
14
14
  #
@@ -32,7 +32,7 @@ module FetcheableOnApi
32
32
 
33
33
  attrs.each do |attr|
34
34
  sorts_configuration[attr] ||= {
35
- as: attr
35
+ as: attr,
36
36
  }
37
37
 
38
38
  sorts_configuration[attr] = sorts_configuration[attr].merge(options)
@@ -70,7 +70,10 @@ module FetcheableOnApi
70
70
  field = field_for(attr_name)
71
71
  return unless belong_to_attributes_for?(klass, field)
72
72
 
73
- klass.arel_table[field].send(sort_method)
73
+ attribute = klass.arel_table[field]
74
+ attribute = attribute.lower if sorts_configuration[attr_name].fetch(:lower, false)
75
+
76
+ attribute.send(sort_method)
74
77
  end
75
78
 
76
79
  def class_for(attr_name, collection)
@@ -92,11 +95,11 @@ module FetcheableOnApi
92
95
  def format_params(params)
93
96
  res = {}
94
97
  params
95
- .split(',')
98
+ .split(",")
96
99
  .each do |attribute|
97
- sort_sign = attribute =~ /\A[+-]/ ? attribute.slice!(0) : '+'
98
- res[attribute.to_sym] = SORT_ORDER[sort_sign]
99
- end
100
+ sort_sign = attribute =~ /\A[+-]/ ? attribute.slice!(0) : "+"
101
+ res[attribute.to_sym] = SORT_ORDER[sort_sign]
102
+ end
100
103
  res
101
104
  end
102
105
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FetcheableOnApi
4
- VERSION = '0.2.4'.freeze
4
+ VERSION = '0.2.5'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fetcheable_on_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabien
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-10 00:00:00.000000000 Z
11
+ date: 2019-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport