Introduction
Introduction Statistics Contact Development Disclaimer Help
Fixed bug: when a report was run with a limit, and then run again with a bigger…
Log
Files
Refs
README
---
commit c56e40b20ceea3a9098f19c675bf7790c0002569
parent 5dd3e6e1a3c3851b6fe2b7c0d20abc65425ed268
Author: Myron Marston <[email protected]>
Date: Sat, 4 Apr 2009 02:21:55 +0800
Fixed bug: when a report was run with a limit, and then run again with a bigger…
Signed-off-by: Marco Otte-Witte <[email protected]>
Diffstat:
M lib/kvlr/reports_as_sparkline/repo… | 42 ++++++++++++++++++++++++++-…
M spec/classes/report_cache_spec.rb | 47 ++++++++++++++++++-----------…
M spec/classes/report_spec.rb | 5 +++++
3 files changed, 68 insertions(+), 26 deletions(-)
---
diff --git a/lib/kvlr/reports_as_sparkline/report_cache.rb b/lib/kvlr/reports_a…
@@ -18,32 +18,60 @@ module Kvlr #:nodoc:
end
# Get any missing data that comes after our cached data...
- new_data = if !options[:live_data] && last_cached_reporting_period =…
+ new_after_cache_data = if !options[:live_data] && last_cached_report…
[]
else
end_date = options[:live_data] ? nil : last_reporting_period && la…
yield((last_cached_reporting_period.next rescue first_reporting_pe…
end
- prepare_result(new_data, cached_data, report, options, cache)
+ # Get any mising data that comes before our cached data....
+ new_before_cache_data = if cached_data.empty? || # after_cache_data …
+ first_cached_reporting_period.date_time == first_reporting_period.…
+ []
+ else
+ yield(first_reporting_period.date_time, first_cached_reporting_per…
+ end
+
+ prepare_result(new_before_cache_data, new_after_cache_data, cached_d…
end
end
private
- def self.prepare_result(new_data, cached_data, report, options, cache …
- new_data = new_data.map { |data| [ReportingPeriod.from_db_string(opt…
+ def self.prepare_result(new_before_cache_data, new_after_cache_data, c…
+ cache_map_proc = lambda { |data| [ReportingPeriod.from_db_string(opt…
+
+ new_after_cache_data = new_after_cache_data.map &cache_map_proc
+ new_before_cache_data = new_before_cache_data.map &cache_map_proc
result = cached_data.map { |cached| [cached.reporting_period, cached…
+
+ first_reporting_period = ReportingPeriod.first(options[:grouping], o…
last_reporting_period = ReportingPeriod.new(options[:grouping], opti…
- reporting_period = cached_data.empty? ? ReportingPeriod.first(option…
+ first_cached_reporting_period = cached_data.empty? ? nil : Reporting…
+ last_cached_reporting_period = cached_data.empty? ? nil : ReportingP…
+
+ if first_cached_reporting_period
+ reporting_period = first_reporting_period
+ while reporting_period < first_cached_reporting_period
+ cached = build_cached_data(report, options[:grouping], reporting…
+ cached.save! if cache
+ result.insert(0, [reporting_period.date_time, cached.value])
+ reporting_period = reporting_period.next
+ end
+ end
+
+ reporting_period = cached_data.empty? ? first_reporting_period : las…
+
while reporting_period < last_reporting_period
- cached = build_cached_data(report, options[:grouping], reporting_p…
+ cached = build_cached_data(report, options[:grouping], reporting_p…
cached.save! if cache
result << [reporting_period.date_time, cached.value]
reporting_period = reporting_period.next
end
+
if options[:live_data]
- result << [last_reporting_period.date_time, find_value(new_data, l…
+ result << [last_reporting_period.date_time, find_value(new_after_c…
end
result
end
diff --git a/spec/classes/report_cache_spec.rb b/spec/classes/report_cache_spec…
@@ -37,7 +37,7 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
}.should raise_error(YieldMatchException)
end
- it 'should yield the reporting period after the last one in the cache if…
+ it 'should yield the reporting period after the last one in the cache, a…
reporting_period = Kvlr::ReportsAsSparkline::ReportingPeriod.new(
@report.options[:grouping],
Time.now - 3.send(@report.options[:grouping].identifier)
@@ -46,11 +46,15 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
cached.stub!(:reporting_period).and_return(reporting_period.date_time)
Kvlr::ReportsAsSparkline::ReportCache.stub!(:find).and_return([cached])
+ expected_dates = [[reporting_period.next.date_time, nil], [reporting_p…
+ yield_count = 0
Kvlr::ReportsAsSparkline::ReportCache.process(@report, @options) do |b…
- begin_at.should == reporting_period.next.date_time
- end_at.should == nil
+ [begin_at, end_at].should == expected_dates[yield_count]
+ yield_count += 1
[]
end
+
+ yield_count.should == 2
end
end
@@ -72,7 +76,7 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
}.should raise_error(YieldMatchException)
end
- it 'should yield the reporting period after the last one in the cache if…
+ it 'should yield the reporting period after the last one in the cache, a…
reporting_period = Kvlr::ReportsAsSparkline::ReportingPeriod.new(
@report.options[:grouping],
Time.now - 3.send(@report.options[:grouping].identifier)
@@ -81,11 +85,15 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
cached.stub!(:reporting_period).and_return(reporting_period.date_time)
Kvlr::ReportsAsSparkline::ReportCache.stub!(:find).and_return([cached])
+ expected_dates = [[reporting_period.next.date_time, nil], [reporting_p…
+ yield_count = 0
Kvlr::ReportsAsSparkline::ReportCache.process(@report, @report.options…
- begin_at.should == reporting_period.next.date_time
- end_at.should == nil
+ [begin_at, end_at].should == expected_dates[yield_count]
+ yield_count += 1
[]
end
+
+ yield_count.should == 2
end
end
@@ -148,12 +156,13 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
end
it 'should prepare the results before it returns them' do
- new_data = []
+ new_after_cache_data = []
+ new_before_cache_data = []
cached_data = []
Kvlr::ReportsAsSparkline::ReportCache.stub!(:find).and_return(cached_dat…
- Kvlr::ReportsAsSparkline::ReportCache.should_receive(:prepare_result).on…
+ Kvlr::ReportsAsSparkline::ReportCache.should_receive(:prepare_result).on…
- Kvlr::ReportsAsSparkline::ReportCache.process(@report, @report.options) …
+ Kvlr::ReportsAsSparkline::ReportCache.process(@report, @report.options) …
end
it 'should yield the first reporting period if the cache is empty' do
@@ -188,7 +197,7 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
before do
@current_reporting_period = Kvlr::ReportsAsSparkline::ReportingPeriod.ne…
- @new_data = [[@current_reporting_period.previous.date_time, 1.0]]
+ @new_after_cache_data = [[@current_reporting_period.previous.date_time, …
Kvlr::ReportsAsSparkline::ReportingPeriod.stub!(:from_db_string).and_ret…
@cached = Kvlr::ReportsAsSparkline::ReportCache.new
@cached.stub!(:save!)
@@ -196,9 +205,9 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
end
it 'should convert the date strings from the newly read data to reporting …
- Kvlr::ReportsAsSparkline::ReportingPeriod.should_receive(:from_db_string…
+ Kvlr::ReportsAsSparkline::ReportingPeriod.should_receive(:from_db_string…
- Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, @new_data, […
+ Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, [], @new_aft…
end
it 'should create :limit instances of Kvlr::ReportsAsSparkline::ReportCach…
@@ -209,7 +218,7 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
0.0
).and_return(@cached)
- Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, [], [], @rep…
+ Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, [], [], [], …
end
it 'should create a new Kvlr::ReportsAsSparkline::ReportCache with the cor…
@@ -226,17 +235,17 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
1.0
).and_return(@cached)
- Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, @new_data, […
+ Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, [], @new_aft…
end
it 'should save the created Kvlr::ReportsAsSparkline::ReportCache' do
@cached.should_receive(:save!).once
- Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, @new_data, […
+ Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, [], @new_aft…
end
it 'should return an array of arrays of Dates and Floats' do
- result = Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, @ne…
+ result = Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, [],…
result.should be_kind_of(Array)
result[0].should be_kind_of(Array)
@@ -247,7 +256,7 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
describe 'with :live_data = false' do
before do
- @result = Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, …
+ @result = Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, …
end
it 'should return an array of length :limit' do
@@ -264,7 +273,7 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
before do
options = @report.options.merge(:live_data => true)
- @result = Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, …
+ @result = Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, …
end
it 'should return an array of length (:limit + 1)' do
@@ -282,7 +291,7 @@ describe Kvlr::ReportsAsSparkline::ReportCache do
it 'should not save the created Kvlr::ReportsAsSparkline::ReportCache' do
@cached.should_not_receive(:save!)
- Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, @new_data,…
+ Kvlr::ReportsAsSparkline::ReportCache.send(:prepare_result, [], @new_a…
end
end
diff --git a/spec/classes/report_spec.rb b/spec/classes/report_spec.rb
@@ -89,6 +89,11 @@ describe Kvlr::ReportsAsSparkline::Report do
@report2.run.should == [[@two_months_ago, 0.0], [@one_month_ago, 1.0]]
end
+ it "should go back further into history on a second report run if the li…
+ @report2.run(:limit => 2)
+ @report2.run(:limit => 3).should == [[@three_months_ago, 2.0], [@two_m…
+ end
+
it "should return data for two months prior to the end date" do
@report2.run(:end_date => 1.month.ago).should == [[@three_months_ago, …
end
You are viewing proxied material from jay.scot. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.