From c9834472f09fb40ddba9402565ccedfb1925282b Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Sat, 22 Oct 2016 12:50:18 -0700 Subject: [PATCH] Better date range handling for range option - #149 --- CHANGELOG.md | 4 ++++ lib/groupdate/magic.rb | 7 ++++++- test/test_helper.rb | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 043bf37..4bd75f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.1.0 [unreleased] + +- Better date range handling for `range` option + ## 3.0.2 - Fixed `group_by_period` with associations diff --git a/lib/groupdate/magic.rb b/lib/groupdate/magic.rb index 826709c..c503101 100644 --- a/lib/groupdate/magic.rb +++ b/lib/groupdate/magic.rb @@ -174,7 +174,12 @@ module Groupdate def time_range @time_range ||= begin time_range = options[:range] - if !time_range && options[:last] + if time_range.is_a?(Range) && time_range.first.is_a?(Date) + # convert range of dates to range of times + last = time_range.last.in_time_zone(time_zone) + last += 1.day unless time_range.exclude_end? + time_range = Range.new(time_range.first.in_time_zone(time_zone), last, true) + elsif !time_range && options[:last] step = 1.send(field) if 1.respond_to?(field) if step now = Time.now diff --git a/test/test_helper.rb b/test/test_helper.rb index a167b81..ceb9c2c 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1059,6 +1059,31 @@ module TestGroupdate assert_equal expected, result(:day, "2013-05-03", true, dates: true) end + # date range + + def test_date_range + ENV["TZ"] = "Europe/Oslo" + expected = { + Date.parse("2013-05-01") => 0, + Date.parse("2013-05-02") => 0, + Date.parse("2013-05-03") => 0 + } + assert_equal expected, User.group_by_day(:created_at, range: Date.parse("2013-05-01")..Date.parse("2013-05-03")).count + ensure + ENV["TZ"] = "UTC" + end + + def test_date_range_exclude_end + ENV["TZ"] = "Europe/Oslo" + expected = { + Date.parse("2013-05-01") => 0, + Date.parse("2013-05-02") => 0 + } + assert_equal expected, User.group_by_day(:created_at, range: Date.parse("2013-05-01")...Date.parse("2013-05-03")).count + ensure + ENV["TZ"] = "UTC" + end + # day start def test_day_start_decimal_end_of_day -- libgit2 0.21.0