diff options
author | Bradley Buda <bradleybuda@gmail.com> | 2011-06-08 13:54:48 -0700 |
---|---|---|
committer | Bradley Buda <bradleybuda@gmail.com> | 2011-06-08 13:54:48 -0700 |
commit | dd3e7a6a349263e4f77736438b62d12c43c73ce3 (patch) | |
tree | 9699893ef1619d42b1e899edbcd5bcf8020054e7 /activesupport | |
parent | 7d537b2106ab21a28e901e6e98c74df1f761243a (diff) | |
download | rails-dd3e7a6a349263e4f77736438b62d12c43c73ce3.tar.gz rails-dd3e7a6a349263e4f77736438b62d12c43c73ce3.tar.bz2 rails-dd3e7a6a349263e4f77736438b62d12c43c73ce3.zip |
Allow a Date to be frozen more than once without an error in Ruby 1.8.x
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/core_ext/date/freeze.rb | 10 | ||||
-rw-r--r-- | activesupport/test/core_ext/date_ext_test.rb | 6 |
2 files changed, 12 insertions, 4 deletions
diff --git a/activesupport/lib/active_support/core_ext/date/freeze.rb b/activesupport/lib/active_support/core_ext/date/freeze.rb index 4edd715ba2..a731f8345e 100644 --- a/activesupport/lib/active_support/core_ext/date/freeze.rb +++ b/activesupport/lib/active_support/core_ext/date/freeze.rb @@ -5,7 +5,7 @@ # first call will result in a frozen object error since the memo # instance variable is uninitialized. # -# Work around by eagerly memoizing before freezing. +# Work around by eagerly memoizing before the first freeze. # # Ruby 1.9 uses a preinitialized instance variable so it's unaffected. # This hack is as close as we can get to feature detection: @@ -17,9 +17,11 @@ if RUBY_VERSION < '1.9' if frozen_object_error.message =~ /frozen/ class Date #:nodoc: def freeze - self.class.private_instance_methods(false).each do |m| - if m.to_s =~ /\A__\d+__\Z/ - instance_variable_set(:"@#{m}", [send(m)]) + unless frozen? + self.class.private_instance_methods(false).each do |m| + if m.to_s =~ /\A__\d+__\Z/ + instance_variable_set(:"@#{m}", [send(m)]) + end end end diff --git a/activesupport/test/core_ext/date_ext_test.rb b/activesupport/test/core_ext/date_ext_test.rb index d81693209f..b4f848cd44 100644 --- a/activesupport/test/core_ext/date_ext_test.rb +++ b/activesupport/test/core_ext/date_ext_test.rb @@ -454,4 +454,10 @@ class DateExtBehaviorTest < Test::Unit::TestCase Date.today.freeze.inspect end end + + def test_can_freeze_twice + assert_nothing_raised do + Date.today.freeze.freeze + end + end end |