diff options
-rw-r--r-- | config/initializers/alaveteli.rb | 1 | ||||
-rw-r--r-- | lib/date_quarter.rb | 22 | ||||
-rw-r--r-- | spec/lib/date_quarter_spec.rb | 29 |
3 files changed, 52 insertions, 0 deletions
diff --git a/config/initializers/alaveteli.rb b/config/initializers/alaveteli.rb index c7672d05b..e909013aa 100644 --- a/config/initializers/alaveteli.rb +++ b/config/initializers/alaveteli.rb @@ -52,6 +52,7 @@ require 'alaveteli_localization' require 'message_prominence' require 'theme' require 'xapian_queries' +require 'date_quarter' AlaveteliLocalization.set_locales(AlaveteliConfiguration::available_locales, AlaveteliConfiguration::default_locale) diff --git a/lib/date_quarter.rb b/lib/date_quarter.rb new file mode 100644 index 000000000..ac159b420 --- /dev/null +++ b/lib/date_quarter.rb @@ -0,0 +1,22 @@ +module DateQuarter + extend self + + def quarters_between(start_at, finish_at) + results = [] + + quarter_start = start_at.beginning_of_quarter + quarter_end = start_at.end_of_quarter + + while quarter_end <= finish_at.end_of_quarter do + # Collect these + results << [quarter_start, quarter_end] + + # Update dates + quarter_start = quarter_end + 1.second + quarter_end = quarter_start.end_of_quarter + end + + results + end + +end diff --git a/spec/lib/date_quarter_spec.rb b/spec/lib/date_quarter_spec.rb new file mode 100644 index 000000000..29c2eb28d --- /dev/null +++ b/spec/lib/date_quarter_spec.rb @@ -0,0 +1,29 @@ +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe DateQuarter do + include DateQuarter + + describe :quarters_between do + + it 'returns all the quarters in a year' do + # This is a bit of a convoluted spec, since we have to convert each + # Time in to an Integer to make a reasonable comparison + # See http://makandracards.com/makandra/1057-why-two-ruby-time-objects-are-not-equal-although-they-appear-to-be + start = Time.parse('2014-01-01') + finish = Time.parse('2014-12-31') + + expected = [['Wed Jan 01 00:00:00 +0000 2014', 'Mon Mar 31 23:59:59 +0000 2014'], + ['Tue Apr 01 00:00:00 +0000 2014', 'Mon Jun 30 23:59:59 +0000 2014'], + ['Tue Jul 01 00:00:00 +0000 2014', 'Tue Sep 30 23:59:59 +0000 2014'], + ['Wed Oct 01 00:00:00 +0000 2014', 'Wed Dec 31 23:59:59 +0000 2014']]. + map { |pair| [Time.parse(pair[0]).to_i, Time.parse(pair[1]).to_i] } + + quarters_between(start, finish).each_with_index do |pair, i| + pair.map!(&:to_i) + pair.should == expected[i] + end + end + + end + +end |