From 604c559ed3577b2226048c31bf5c4cff5de478a8 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Fri, 7 Mar 2014 09:19:02 -0800 Subject: [PATCH] Time keys should use time zone instead of UTC - closes #29 --- lib/groupdate/scopes.rb | 3 ++- lib/groupdate/series.rb | 4 ++-- test/test_helper.rb | 6 ++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/groupdate/scopes.rb b/lib/groupdate/scopes.rb index 2946f27..bab0340 100644 --- a/lib/groupdate/scopes.rb +++ b/lib/groupdate/scopes.rb @@ -13,6 +13,7 @@ module Groupdate column = connection.quote_table_name(args[0]) time_zone = args[1] || options[:time_zone] || Groupdate.time_zone || Time.zone || "Etc/UTC" if time_zone.is_a?(ActiveSupport::TimeZone) or time_zone = ActiveSupport::TimeZone[time_zone] + time_zone_object = time_zone time_zone = time_zone.tzinfo.name else raise "Unrecognized time zone" @@ -75,7 +76,7 @@ module Groupdate group = group(Groupdate::OrderHack.new(sanitize_sql_array(query), field, time_zone)) range = args[2] || options[:range] || true unless options[:series] == false - Series.new(group, field, column, time_zone, range, week_start, day_start) + Series.new(group, field, column, time_zone_object, range, week_start, day_start) else group end diff --git a/lib/groupdate/series.rb b/lib/groupdate/series.rb index e218116..d0ae883 100644 --- a/lib/groupdate/series.rb +++ b/lib/groupdate/series.rb @@ -23,7 +23,7 @@ module Groupdate when "day_of_week", "hour_of_day" lambda{|k| k.to_i } else - lambda{|k| (k.is_a?(String) ? utc.parse(k) : k.to_time).utc } + lambda{|k| (k.is_a?(String) ? utc.parse(k) : k.to_time).in_time_zone(@time_zone) } end count = Hash[ count.map{|k, v| [cast_method.call(k), v] } ] @@ -76,7 +76,7 @@ module Groupdate series << series.last + step end - series.map{|s| s.to_time.utc } + series else [] end diff --git a/test/test_helper.rb b/test/test_helper.rb index 3200a7c..631503d 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -474,6 +474,12 @@ module TestGroupdate assert_empty User.where("id = 0").group_by_day(:created_at).count end + def test_time_zone + create_user "2013-05-01 00:00:00 UTC" + time_zone = "Pacific Time (US & Canada)" + assert_equal time_zone, User.group_by_day(:created_at, time_zone: time_zone).count.keys.first.time_zone.name + end + # helpers def assert_result_time(method, expected, time_str, time_zone = false, options = {}) -- libgit2 0.21.0