Commit c9834472f09fb40ddba9402565ccedfb1925282b

Authored by Andrew Kane
1 parent 9df6106d

Better date range handling for range option - #149

CHANGELOG.md
  1 +## 3.1.0 [unreleased]
  2 +
  3 +- Better date range handling for `range` option
  4 +
1 5 ## 3.0.2
2 6  
3 7 - Fixed `group_by_period` with associations
... ...
lib/groupdate/magic.rb
... ... @@ -174,7 +174,12 @@ module Groupdate
174 174 def time_range
175 175 @time_range ||= begin
176 176 time_range = options[:range]
177   - if !time_range && options[:last]
  177 + if time_range.is_a?(Range) && time_range.first.is_a?(Date)
  178 + # convert range of dates to range of times
  179 + last = time_range.last.in_time_zone(time_zone)
  180 + last += 1.day unless time_range.exclude_end?
  181 + time_range = Range.new(time_range.first.in_time_zone(time_zone), last, true)
  182 + elsif !time_range && options[:last]
178 183 step = 1.send(field) if 1.respond_to?(field)
179 184 if step
180 185 now = Time.now
... ...
test/test_helper.rb
... ... @@ -1059,6 +1059,31 @@ module TestGroupdate
1059 1059 assert_equal expected, result(:day, "2013-05-03", true, dates: true)
1060 1060 end
1061 1061  
  1062 + # date range
  1063 +
  1064 + def test_date_range
  1065 + ENV["TZ"] = "Europe/Oslo"
  1066 + expected = {
  1067 + Date.parse("2013-05-01") => 0,
  1068 + Date.parse("2013-05-02") => 0,
  1069 + Date.parse("2013-05-03") => 0
  1070 + }
  1071 + assert_equal expected, User.group_by_day(:created_at, range: Date.parse("2013-05-01")..Date.parse("2013-05-03")).count
  1072 + ensure
  1073 + ENV["TZ"] = "UTC"
  1074 + end
  1075 +
  1076 + def test_date_range_exclude_end
  1077 + ENV["TZ"] = "Europe/Oslo"
  1078 + expected = {
  1079 + Date.parse("2013-05-01") => 0,
  1080 + Date.parse("2013-05-02") => 0
  1081 + }
  1082 + assert_equal expected, User.group_by_day(:created_at, range: Date.parse("2013-05-01")...Date.parse("2013-05-03")).count
  1083 + ensure
  1084 + ENV["TZ"] = "UTC"
  1085 + end
  1086 +
1062 1087 # day start
1063 1088  
1064 1089 def test_day_start_decimal_end_of_day
... ...