diff options
-rw-r--r-- | activesupport/CHANGELOG | 2 | ||||
-rw-r--r-- | activesupport/lib/active_support/time_with_zone.rb | 2 | ||||
-rw-r--r-- | activesupport/test/core_ext/time_with_zone_test.rb | 11 | ||||
-rw-r--r-- | railties/CHANGELOG | 2 | ||||
-rw-r--r-- | railties/lib/initializer.rb | 2 |
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 |