aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activesupport/CHANGELOG2
-rw-r--r--activesupport/lib/active_support/time_with_zone.rb2
-rw-r--r--activesupport/test/core_ext/time_with_zone_test.rb11
-rw-r--r--railties/CHANGELOG2
-rw-r--r--railties/lib/initializer.rb2
5 files changed, 17 insertions, 2 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG
index 27639c38a3..a53e518b3f 100644
--- a/activesupport/CHANGELOG
+++ b/activesupport/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* TimeWithZone#marshal_load does zone lookup via Time.get_zone, so that tzinfo/Olson identifiers are handled [Geoff Buesing]
+
* Time.zone= accepts TZInfo::Timezone instances and Olson identifiers; wraps result in TimeZone instance [Geoff Buesing]
* TimeWithZone time conversions don't need to be wrapped in TimeOrDateTime, because TZInfo does this internally [Geoff Buesing]
diff --git a/activesupport/lib/active_support/time_with_zone.rb b/activesupport/lib/active_support/time_with_zone.rb
index 6566c1c385..43b102db2e 100644
--- a/activesupport/lib/active_support/time_with_zone.rb
+++ b/activesupport/lib/active_support/time_with_zone.rb
@@ -206,7 +206,7 @@ module ActiveSupport
end
def marshal_load(variables)
- initialize(variables[0], ::TimeZone[variables[1]], variables[2])
+ initialize(variables[0], ::Time.send!(:get_zone, variables[1]), variables[2])
end
# Ensure proxy class responds to all methods that underlying time instance responds to
diff --git a/activesupport/test/core_ext/time_with_zone_test.rb b/activesupport/test/core_ext/time_with_zone_test.rb
index f20484666e..a1776117df 100644
--- a/activesupport/test/core_ext/time_with_zone_test.rb
+++ b/activesupport/test/core_ext/time_with_zone_test.rb
@@ -312,6 +312,17 @@ uses_tzinfo 'TimeWithZoneTest' do
assert_equal Time.utc(1999, 12, 31, 19), mtime.time
end
end
+
+ def test_marshal_dump_and_load_with_tzinfo_identifier
+ silence_warnings do # silence warnings raised by tzinfo gem
+ twz = ActiveSupport::TimeWithZone.new(@utc, TZInfo::Timezone.get('America/New_York'))
+ marshal_str = Marshal.dump(twz)
+ mtime = Marshal.load(marshal_str)
+ assert_equal Time.utc(2000, 1, 1, 0), mtime.utc
+ assert_equal 'America/New_York', mtime.time_zone.name
+ assert_equal Time.utc(1999, 12, 31, 19), mtime.time
+ end
+ end
def test_method_missing_with_non_time_return_value
silence_warnings do # silence warnings raised by tzinfo gem
diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index 00d760e99f..97f3b8cf7c 100644
--- a/railties/CHANGELOG
+++ b/railties/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* config.time_zone accepts TZInfo::Timezone identifiers as well as Rails TimeZone identifiers [Geoff Buesing]
+
* Rails::Initializer#initialize_time_zone raises an error if value assigned to config.time_zone is not recognized. Rake time zone tasks only require ActiveSupport instead of entire environment [Geoff Buesing]
* Stop adding the antiquated test/mocks/* directories and only add them to the path if they're still there for legacy reasons [DHH]
diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb
index 9909e6e45e..c60fe3d700 100644
--- a/railties/lib/initializer.rb
+++ b/railties/lib/initializer.rb
@@ -353,7 +353,7 @@ module Rails
# If assigned value cannot be matched to a TimeZone, an exception will be raised.
def initialize_time_zone
if configuration.time_zone
- zone_default = TimeZone[configuration.time_zone]
+ zone_default = Time.send!(:get_zone, configuration.time_zone)
unless zone_default
raise "Value assigned to config.time_zone not recognized. Run `rake -D time` for a list of tasks for finding appropriate time zone names."
end