From c79f1d281f1932d4203c7b5b5c793e370ed63838 Mon Sep 17 00:00:00 2001 From: gbuesing Date: Sun, 19 Oct 2008 22:33:26 -0500 Subject: TimeWithZone#freeze: preload instance variables so that we can actually freeze --- activesupport/CHANGELOG | 2 ++ activesupport/lib/active_support/time_with_zone.rb | 4 ++-- activesupport/test/core_ext/time_with_zone_test.rb | 13 +++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) (limited to 'activesupport') diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index 68b1b66e13..803f95d90e 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,5 +1,7 @@ *Edge* +* TimeWithZone#freeze: preload instance variables so that we can actually freeze [Geoff Buesing] + * Fix Brasilia timezone #1180 [Marcus Derencius, Kane] * Time#advance recognizes fractional days and weeks. Deprecate Durations of fractional months and years #970 [Tom Lea] diff --git a/activesupport/lib/active_support/time_with_zone.rb b/activesupport/lib/active_support/time_with_zone.rb index b7b8807c6d..a02cd81f72 100644 --- a/activesupport/lib/active_support/time_with_zone.rb +++ b/activesupport/lib/active_support/time_with_zone.rb @@ -277,9 +277,9 @@ module ActiveSupport end alias_method :kind_of?, :is_a? - # Neuter freeze because freezing can cause problems with lazy loading of attributes. def freeze - self + period; utc; time # preload instance variables before freezing + super end def marshal_dump diff --git a/activesupport/test/core_ext/time_with_zone_test.rb b/activesupport/test/core_ext/time_with_zone_test.rb index 72b540efe0..774fd57ee6 100644 --- a/activesupport/test/core_ext/time_with_zone_test.rb +++ b/activesupport/test/core_ext/time_with_zone_test.rb @@ -385,6 +385,19 @@ class TimeWithZoneTest < Test::Unit::TestCase assert_equal @twz.inspect, mtime.inspect end end + + def test_freeze + @twz.freeze + assert @twz.frozen? + end + + def test_freeze_preloads_instance_variables + @twz.freeze + assert_nothing_raised do + @twz.period + @twz.time + end + end uses_mocha 'TestDatePartValueMethods' do def test_method_missing_with_non_time_return_value -- cgit v1.2.3