diff options
author | Peter Jaros <peter.a.jaros@gmail.com> | 2014-09-03 16:00:06 -0400 |
---|---|---|
committer | Peter Jaros <peter.a.jaros@gmail.com> | 2014-09-03 16:09:15 -0400 |
commit | fdc5e768ca29e3ad4288dcd8a8c7147cea8a1f97 (patch) | |
tree | 88508567e7a92ebebb516877a74d0062be5c8bb0 /activesupport | |
parent | 66c9d31c2b9a58db03668fb0840669e4d4374123 (diff) | |
download | rails-fdc5e768ca29e3ad4288dcd8a8c7147cea8a1f97.tar.gz rails-fdc5e768ca29e3ad4288dcd8a8c7147cea8a1f97.tar.bz2 rails-fdc5e768ca29e3ad4288dcd8a8c7147cea8a1f97.zip |
Methods are not duplicable.
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/CHANGELOG.md | 5 | ||||
-rw-r--r-- | activesupport/lib/active_support/core_ext/object/duplicable.rb | 10 | ||||
-rw-r--r-- | activesupport/test/core_ext/object/duplicable_test.rb | 2 |
3 files changed, 16 insertions, 1 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index 617baaa1a8..62e16ed9bd 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,3 +1,8 @@ +* `Method` objects now report themselves as not `duplicable?`. This allows + hashes and arrays containing `Method` objects to be `deep_dup`ed. + + *Peter Jaros* + * `determine_constant_from_test_name` does no longer shadow `NameError`s which happen during constant autoloading. diff --git a/activesupport/lib/active_support/core_ext/object/duplicable.rb b/activesupport/lib/active_support/core_ext/object/duplicable.rb index c5d59128e5..665cb0f96d 100644 --- a/activesupport/lib/active_support/core_ext/object/duplicable.rb +++ b/activesupport/lib/active_support/core_ext/object/duplicable.rb @@ -91,3 +91,13 @@ class BigDecimal # can't dup, so use superclass implementation end end + +class Method + # Methods are not duplicable: + # + # method(:puts).duplicable? # => false + # method(:puts).dup # => TypeError: allocator undefined for Method + def duplicable? + false + end +end diff --git a/activesupport/test/core_ext/object/duplicable_test.rb b/activesupport/test/core_ext/object/duplicable_test.rb index 84512380cf..34679cb362 100644 --- a/activesupport/test/core_ext/object/duplicable_test.rb +++ b/activesupport/test/core_ext/object/duplicable_test.rb @@ -4,7 +4,7 @@ require 'active_support/core_ext/object/duplicable' require 'active_support/core_ext/numeric/time' class DuplicableTest < ActiveSupport::TestCase - RAISE_DUP = [nil, false, true, :symbol, 1, 2.3, 5.seconds] + RAISE_DUP = [nil, false, true, :symbol, 1, 2.3, 5.seconds, method(:puts)] ALLOW_DUP = ['1', Object.new, /foo/, [], {}, Time.now, Class.new, Module.new] # Needed to support Ruby 1.9.x, as it doesn't allow dup on BigDecimal, instead |