forest_liana 1.0.0.pre.beta.1 → 1.0.0.pre.beta.2

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
  SHA1:
3
- metadata.gz: 16861dd6d242cdecc96ac42cb8fab520733de0bc
4
- data.tar.gz: df978d7c4b3cf406df199b505f921a292a6547aa
3
+ metadata.gz: 96387ca6684d93d492164c89a8047c8a1c856868
4
+ data.tar.gz: e8b02d496b3fc2fcc1912cb4046bb4a9f3cda639
5
5
  SHA512:
6
- metadata.gz: 0937c17604b57f0322ea6de6b3e40e225ed01c71d333dd295c6682540e1e82b63efccb656af2890714dde69cdfe7801dc25fef36f707a1f337394f5e31fc9d9d
7
- data.tar.gz: 055a857986359b2d69bb4886290956edd8e710bafec46421b47151f3ae8ca16d410accbb6e19ce80244b7f4e4efea59ab99ea9eff3535c078e13d5dcdf49ae7f
6
+ metadata.gz: 100ec457f01ffc78b7805244522740730a9fb96e3fd46bbd039f5dc579fdb635a07f6e76dac6d10853cc0ec062cb07d5bdef74623532d07bad3409c0c8453805
7
+ data.tar.gz: 84c3823fc6e4554f533f2fa3744354ee6ab2301eed00bfe9766a85eabb7b8a75fb1e81c6e90afe4cea520a4a0199663846b7d23181443ee5eb9765942104369b
@@ -21,31 +21,52 @@ module ForestLiana
21
21
  private
22
22
 
23
23
  def search_query
24
- SearchQueryBuilder.new(@resource.includes(includes), @params).perform
24
+ SearchQueryBuilder.new(@resource.joins(includes), @params).perform
25
25
  end
26
26
 
27
27
  def sort_query
28
- query = {}
28
+ query = nil
29
29
 
30
30
  if @params[:sort]
31
31
  @params[:sort].split(',').each do |field|
32
- order = :asc
33
- if field[0] === '-'
34
- order = :desc
35
- field.slice!(0)
36
- end
32
+ order = detect_sort_order(@params[:sort])
33
+ field.slice!(0) if order == :desc
34
+ field = detect_reference(field)
37
35
 
38
- query[field] = order
36
+ query = "#{field} #{order.upcase}"
39
37
  end
40
38
  elsif @resource.column_names.include?('created_at')
41
- query[:created_at] = :desc
39
+ query = 'created_at DESC'
42
40
  elsif @resource.column_names.include?('id')
43
- query[:id] = :desc
41
+ query = 'id DESC'
42
+ else
43
+ return @records
44
44
  end
45
45
 
46
46
  @records.order(query)
47
47
  end
48
48
 
49
+ def detect_sort_order(field)
50
+ return (if field[0] == '-' then :desc else :asc end)
51
+ end
52
+
53
+ def detect_reference(param)
54
+ ref, field = param.split('.')
55
+
56
+ if ref && field
57
+ association = @resource.reflect_on_all_associations
58
+ .find {|a| a.name == ref.to_sym }
59
+
60
+ if association
61
+ "#{association.class_name.to_s.underscore.pluralize}.#{field}"
62
+ else
63
+ param
64
+ end
65
+ else
66
+ param
67
+ end
68
+ end
69
+
49
70
  def includes
50
71
  @resource
51
72
  .reflect_on_all_associations
@@ -1,3 +1,3 @@
1
1
  module ForestLiana
2
- VERSION = "1.0.0-beta.1"
2
+ VERSION = "1.0.0-beta.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forest_liana
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.beta.1
4
+ version: 1.0.0.pre.beta.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sandro Munda