croods 0.3.2 → 0.3.3

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: 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