forest_liana 1.3.10 → 1.3.11

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