forest_liana 1.3.10 → 1.3.11

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
  SHA1:
3
- metadata.gz: abcf61ac2e539e94f9aa5039c5819921a48b688b
4
- data.tar.gz: 7c053dd7579561fc685ba5af697bb15bf742f5b4
3
+ metadata.gz: 5499cb583c0ca2e7eb3a4b9596a76e5ca545842f
4
+ data.tar.gz: 3727b0e41710ee0f3a3b1a4962bc384d280aec84
5
5
  SHA512:
6
- metadata.gz: 439361ffdf4942c8c86e199885f9046c5c3d149b9c63fda96b35d004bc72aeedb366a284ac460fd50be58e57ba27d1df4d93d3c0389c1c730ce2d0d53d0ec3a6
7
- data.tar.gz: 526e26ad8daf48e7f71d659a824f23b5699b23cd858f947e399c76acb824cceec6a83ea9cd8fc55541e436bb213592bcb4736bf4420d9e690d24d884991da033
6
+ metadata.gz: a81248483a08e7dd28fbd49176057242d9e384520d0d4c018719551c6e21dc8c5b66b610ca0491a22d33e34d511b94445aa0584ae0b9e4ce4548020d3eef57cf
7
+ data.tar.gz: b7679fff43bb4058c006e61b9013dbb3facf914c9729249596e15b8237902497935da649cc3aa5dc20ec2e57609ff53d11129806f51f5b3a3802550602beb7f7
@@ -14,7 +14,7 @@ module ForestLiana
14
14
  @params[:filters].try(:each) do |filter|
15
15
  operator, filter_value = OperatorValueParser.parse(filter[:value])
16
16
  value = OperatorValueParser.add_where(value, filter[:field], operator,
17
- filter_value)
17
+ filter_value, @resource)
18
18
  end
19
19
 
20
20
  value = value.send(time_range, @params[:group_by_date_field])
@@ -29,33 +29,41 @@ module ForestLiana
29
29
  [operator, value]
30
30
  end
31
31
 
32
- def self.add_where(query, field, operator, value)
32
+ def self.add_where(query, field, operator, value, resource)
33
+ if field.split(':').size < 2
34
+ field_name = "\"#{resource.table_name}\".\"#{field}\""
35
+ else
36
+ association = field.split(':')[0].pluralize
37
+ field_name = "\"#{association}\".\"#{field.split(':')[1]}\""
38
+ end
39
+
33
40
  match = /^last(\d+)days$/.match(value)
34
41
  if match && match[1]
35
- return query = query.where("#{field} >= ?", Integer(match[1]).day.ago)
42
+ return query = query.where("#{field_name} >= ?",
43
+ Integer(match[1]).day.ago)
36
44
  end
37
45
 
38
46
  case value
39
47
  when 'yesterday'
40
- range = 1.day.ago.beginning_of_day..1.day.ago.end_of_day
41
- query = query.where(created_at: range)
48
+ query = query.where("#{field_name} BETWEEN " +
49
+ "'#{1.day.ago.beginning_of_day}' AND '#{1.day.ago.end_of_day}'")
42
50
  when 'lastWeek'
43
- range = 1.week.ago.beginning_of_week..1.week.ago.end_of_week
44
- query = query.where(created_at: range)
51
+ query = query.where("#{field_name} BETWEEN " +
52
+ "'#{1.week.ago.beginning_of_week}' AND '#{1.week.ago.end_of_week}'")
45
53
  when 'last2Weeks'
46
- range = 2.week.ago.beginning_of_week..1.week.ago.end_of_week
47
- query = query.where(created_at: range)
54
+ query = query.where("#{field_name} BETWEEN " +
55
+ "'#{2.week.ago.beginning_of_week}' AND '#{1.week.ago.end_of_week}'")
48
56
  when 'lastMonth'
49
- range = 1.month.ago.beginning_of_month..1.month.ago.end_of_month
50
- query = query.where(created_at: range)
57
+ query = query.where("#{field_name} BETWEEN " +
58
+ "'#{1.month.ago.beginning_of_month}' AND '#{1.month.ago.end_of_month}'")
51
59
  when 'last3Months'
52
- range = 3.month.ago.beginning_of_month..1.month.ago.end_of_month
53
- query = query.where(created_at: range)
60
+ query = query.where("#{field_name} BETWEEN " +
61
+ "'#{3.month.ago.beginning_of_month}' AND '#{1.month.ago.end_of_month}'")
54
62
  when 'lastYear'
55
- range = 1.year.ago.beginning_of_year..1.year.ago.end_of_year
56
- query = query.where(created_at: range)
63
+ query = query.where("#{field_name} BETWEEN " +
64
+ "'#{1.year.ago.beginning_of_year}' AND '#{1.year.ago.end_of_year}'")
57
65
  else
58
- where = "#{field} #{operator}"
66
+ where = "#{field_name} #{operator}"
59
67
  where += " '#{value}'" if value
60
68
  query = query.where(where)
61
69
  end
@@ -14,7 +14,7 @@ module ForestLiana
14
14
  @params[:filters].try(:each) do |filter|
15
15
  operator, filter_value = OperatorValueParser.parse(filter[:value])
16
16
  value = OperatorValueParser.add_where(value, filter[:field], operator,
17
- filter_value)
17
+ filter_value, @resource)
18
18
  end
19
19
 
20
20
  # NOTICE: The generated alias for a count is "count_all", for a sum the
@@ -35,37 +35,22 @@ module ForestLiana
35
35
  @records = @records.includes(ref) if association?(ref)
36
36
 
37
37
  field = detect_reference(field)
38
- association = @resource.reflect_on_association(field.to_sym)
39
- if [:has_many, :has_and_belongs_to_many].include?(
40
- association.try(:macro))
41
- @records = has_many_sort(association, order)
42
- else
38
+ if field.index('.').nil?
43
39
  @records = @records
44
40
  .order("#{@resource.table_name}.#{field} #{order.upcase}")
41
+ else
42
+ @records = @records.order("#{field} #{order.upcase}")
45
43
  end
46
44
  end
47
45
  elsif @resource.column_names.include?('created_at')
48
46
  @records = @records.order("#{@resource.table_name}.created_at DESC")
49
47
  elsif @resource.column_names.include?('id')
50
48
  @records = @records.order("#{@resource.table_name}.id DESC")
51
- else
52
- @records
53
49
  end
54
50
 
55
51
  @records
56
52
  end
57
53
 
58
- def has_many_sort(association, order)
59
- @records
60
- .select("#{@resource.table_name}.*,
61
- COUNT(#{association.table_name}.id)
62
- #{association.table_name}_has_many_count")
63
- .joins(ArelHelpers.join_association(@resource, association.name,
64
- Arel::Nodes::OuterJoin))
65
- .group("#{@resource.table_name}.id")
66
- .order("#{association.table_name}_has_many_count #{order.upcase}")
67
- end
68
-
69
54
  def detect_sort_order(field)
70
55
  return (if field[0] == '-' then :desc else :asc end)
71
56
  end
@@ -51,11 +51,11 @@ module ForestLiana
51
51
  def filter_param
52
52
  if @params[:filter]
53
53
  @params[:filter].each do |field, values|
54
- next if association?(field)
54
+ next if has_many_association?(field)
55
55
  values.split(',').each do |value|
56
56
  operator, value = OperatorValueParser.parse(value)
57
57
  @records = OperatorValueParser.add_where(@records, field, operator,
58
- value)
58
+ value, @resource)
59
59
  end
60
60
  end
61
61
  end
@@ -14,7 +14,7 @@ module ForestLiana
14
14
  @params[:filters].try(:each) do |filter|
15
15
  operator, filter_value = OperatorValueParser.parse(filter[:value])
16
16
  value = OperatorValueParser.add_where(value, filter[:field], operator,
17
- filter_value)
17
+ filter_value, @resource)
18
18
  end
19
19
 
20
20
  @record = Model::Stat.new(value: count(value))
@@ -1,3 +1,3 @@
1
1
  module ForestLiana
2
- VERSION = "1.3.10"
2
+ VERSION = "1.3.11"
3
3
  end
@@ -0,0 +1,2 @@
1
+ class Owner < ActiveRecord::Base
2
+ end
@@ -0,0 +1,3 @@
1
+ class Tree < ActiveRecord::Base
2
+ belongs_to :owner
3
+ end
@@ -0,0 +1,7 @@
1
+ class CreateOwner < ActiveRecord::Migration
2
+ def change
3
+ create_table :owners do |t|
4
+ t.string :name
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ class CreateTree < ActiveRecord::Migration
2
+ def change
3
+ create_table :trees do |t|
4
+ t.string :name
5
+ t.references :owner, index: true
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ class AddTimestamps < ActiveRecord::Migration
2
+ def change
3
+ add_column :owners, :created_at, :datetime
4
+ add_column :owners, :updated_at, :datetime
5
+ add_column :trees, :created_at, :datetime
6
+ add_column :trees, :updated_at, :datetime
7
+ end
8
+ end
@@ -11,8 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20150814081918) do
15
-
14
+ ActiveRecord::Schema.define(version: 20160628173505) do
16
15
  create_table "belongs_to_class_name_fields", force: :cascade do |t|
17
16
  t.integer "foo_id"
18
17
  end
@@ -67,6 +66,12 @@ ActiveRecord::Schema.define(version: 20150814081918) do
67
66
  t.integer "field"
68
67
  end
69
68
 
69
+ create_table "owners", force: :cascade do |t|
70
+ t.string "name"
71
+ t.datetime "created_at"
72
+ t.datetime "updated_at"
73
+ end
74
+
70
75
  create_table "polymorphic_fields", force: :cascade do |t|
71
76
  t.integer "has_one_field_id"
72
77
  end
@@ -77,4 +82,13 @@ ActiveRecord::Schema.define(version: 20150814081918) do
77
82
  t.string "field"
78
83
  end
79
84
 
85
+ create_table "trees", force: :cascade do |t|
86
+ t.string "name"
87
+ t.integer "owner_id"
88
+ t.datetime "created_at"
89
+ t.datetime "updated_at"
90
+ end
91
+
92
+ add_index "trees", ["owner_id"], name: "index_trees_on_owner_id"
93
+
80
94
  end
Binary file