always serialize report cache conditions in the same way - reportable - Fork of reportable required by WarVox, from hdm/reportable.
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit c66cd7bdff8d7050c328a668559809b942cd3507
(DIR) parent cb4ffc9ae26e50d844a3bd21be0d0530e7a59fa4
(HTM) Author: Lars Kuhnt <lars.kuhnt@gmail.com>
Date: Mon, 25 Oct 2010 15:55:57 +0200
always serialize report cache conditions in the same way
Diffstat:
M lib/saulabs/reportable/report_cach… | 14 ++++++++++++--
M spec/classes/report_cache_spec.rb | 14 ++++++++++++++
2 files changed, 26 insertions(+), 2 deletions(-)
---
(DIR) diff --git a/lib/saulabs/reportable/report_cache.rb b/lib/saulabs/reportable/report_cache.rb
@@ -110,11 +110,21 @@ module Saulabs
:report_name => report.name.to_s,
:grouping => grouping.identifier.to_s,
:aggregation => report.aggregation.to_s,
- :conditions => conditions.join(''),
+ :conditions => serialize_conditions(conditions),
:reporting_period => reporting_period.date_time,
:value => value
)
end
+
+ def self.serialize_conditions(conditions)
+ if conditions.is_a?(Array)
+ conditions.join
+ elsif conditions.is_a?(Hash)
+ conditions.map.sort{|x,y|x.to_s<=>y.to_s}.flatten.join
+ else
+ conditions.to_s
+ end
+ end
def self.read_cached_data(report, options)
options[:conditions] ||= []
@@ -126,7 +136,7 @@ module Saulabs
report.name.to_s,
options[:grouping].identifier.to_s,
report.aggregation.to_s,
- options[:conditions].join('')
+ serialize_conditions(options[:conditions])
]
first_reporting_period = get_first_reporting_period(options)
last_reporting_period = get_last_reporting_period(options)
(DIR) diff --git a/spec/classes/report_cache_spec.rb b/spec/classes/report_cache_spec.rb
@@ -276,6 +276,20 @@ describe Saulabs::Reportable::ReportCache do
end
end
end
+
+ describe '.serialize_conditions' do
+
+ it 'should serialize a conditions array correctly' do
+ result = Saulabs::Reportable::ReportCache.send(:serialize_conditions, ['active = ? AND gender = ?', true, 'male'])
+ result.should eql('active = ? AND gender = ?truemale')
+ end
+
+ it 'should serialize a conditions hash correctly' do
+ result = Saulabs::Reportable::ReportCache.send(:serialize_conditions, { :gender => 'male', :active => true })
+ result.should eql('activetruegendermale')
+ end
+
+ end
describe '.prepare_result' do