Commit c9834472f09fb40ddba9402565ccedfb1925282b
1 parent
9df6106d
Exists in
master
and in
4 other branches
Better date range handling for range option - #149
Showing
3 changed files
with
35 additions
and
1 deletions
Show diff stats
CHANGELOG.md
lib/groupdate/magic.rb
@@ -174,7 +174,12 @@ module Groupdate | @@ -174,7 +174,12 @@ module Groupdate | ||
174 | def time_range | 174 | def time_range |
175 | @time_range ||= begin | 175 | @time_range ||= begin |
176 | time_range = options[:range] | 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 | step = 1.send(field) if 1.respond_to?(field) | 183 | step = 1.send(field) if 1.respond_to?(field) |
179 | if step | 184 | if step |
180 | now = Time.now | 185 | now = Time.now |
test/test_helper.rb
@@ -1059,6 +1059,31 @@ module TestGroupdate | @@ -1059,6 +1059,31 @@ module TestGroupdate | ||
1059 | assert_equal expected, result(:day, "2013-05-03", true, dates: true) | 1059 | assert_equal expected, result(:day, "2013-05-03", true, dates: true) |
1060 | end | 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 | # day start | 1087 | # day start |
1063 | 1088 | ||
1064 | def test_day_start_decimal_end_of_day | 1089 | def test_day_start_decimal_end_of_day |