croods 0.3.2 → 0.3.3

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
  SHA256:
3
- metadata.gz: 63c99f117704edaa49eb759248b862eb75611b3cf97d0d539a70b946c94478fe
4
- data.tar.gz: 377f6b1e1ba4619fb1004b31c9c23339fbaa47144f76dde57f58a6a09d4cf06e
3
+ metadata.gz: 9b91328083ded875d3426c54dc559f88244325ef94b858e9f5c3f7e023074e3e
4
+ data.tar.gz: 19c5a896ecd8b90656cbd5a8ce13404e8d97fdcd464ced2635cc54ec440e1b79
5
5
  SHA512:
6
- metadata.gz: 7e16d6d4fdbab8d49a19f24561dc8018c91244373c5bd89de7667147c3186f55c29f183c90beb9a92164ef76392a2be1315db3f4ac0f4d7ef7d513f6c43b65d7
7
- data.tar.gz: a01538c937bec85378379476e9d7948dfc87af86f5d952980875dea965e4352e2f14a0a94eae92145ed7730157523b544f12fefc16e44f5607407abfd3a305f7
6
+ metadata.gz: 3bd8d3bb1ad81a579b28117a9b438db8183e618840f238870ac8cf775138da8a066418dfe2e71085ad6f9c2495cb2de7b62e733c3508df57e568094114dbb8e0
7
+ data.tar.gz: 737e22753cc7354b386ebcbf74096a87f212d23c06871dd1054236b76464560e99ab6d77e02cdd3bcad69cc58e9fbab86d868d2a3a2ac14706727237753532d6
@@ -27,9 +27,31 @@ module Croods
27
27
  end
28
28
  end
29
29
 
30
+ def order_by
31
+ params[:order_by].presence
32
+ end
33
+
34
+ def order
35
+ params[:order].presence
36
+ end
37
+
38
+ # rubocop:disable Metrics/AbcSize
39
+ def sort_by_method(list)
40
+ if order_by && order
41
+ list.public_send(resource.sort_by, order_by, order)
42
+ elsif order_by
43
+ list.public_send(resource.sort_by, order_by)
44
+ elsif order
45
+ list.public_send(resource.sort_by, order)
46
+ else
47
+ list.public_send(resource.sort_by)
48
+ end
49
+ end
50
+ # rubocop:enable Metrics/AbcSize
51
+
30
52
  def sort(list)
31
- if list.respond_to? resource.sort_by
32
- list.public_send(resource.sort_by, params[:order_by], params[:order])
53
+ if resource.sort_by_method?
54
+ sort_by_method(list)
33
55
  else
34
56
  list.order(resource.sort_by)
35
57
  end
@@ -43,6 +43,10 @@ module Croods
43
43
  merged_attributes(self, model.columns_hash)
44
44
  end
45
45
 
46
+ def attribute_names
47
+ attributes.map { |key, _| key }
48
+ end
49
+
46
50
  def definitions
47
51
  attributes
48
52
  .merge(request_instance.additional_attributes)
@@ -19,10 +19,15 @@ module Croods
19
19
  @order_params ||= [order_by_attribute, order_attribute]
20
20
  end
21
21
 
22
- def sort_by(attribute = nil)
23
- return @sort_by ||= :created_at unless attribute
22
+ def sort_by_method?
23
+ sort_by.is_a?(Symbol) && !sort_by.to_s.in?(attribute_names) &&
24
+ model.respond_to?(sort_by)
25
+ end
26
+
27
+ def sort_by(sort = nil)
28
+ return @sort_by ||= :created_at unless sort
24
29
 
25
- @sort_by ||= attribute
30
+ @sort_by ||= sort
26
31
  end
27
32
  end
28
33
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Croods
4
- VERSION = '0.3.2'
4
+ VERSION = '0.3.3'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: croods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Weinmann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-23 00:00:00.000000000 Z
11
+ date: 2020-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: api-pagination