diff options
author | Jon Leighton <j@jonathanleighton.com> | 2012-05-12 04:23:03 -0700 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2012-05-12 04:23:03 -0700 |
commit | 6f2aee3c18e15307fab6a73f9b15bd49e4f63bb0 (patch) | |
tree | 124812d3d15a403747daca025b0430d2bb50e806 | |
parent | 667d0bdd90ef6e6b691f0cc4cf5535b8da69f248 (diff) | |
parent | b8f394f4a381e0b4cefd289df7cf7281bf0f79e9 (diff) | |
download | rails-6f2aee3c18e15307fab6a73f9b15bd49e4f63bb0.tar.gz rails-6f2aee3c18e15307fab6a73f9b15bd49e4f63bb0.tar.bz2 rails-6f2aee3c18e15307fab6a73f9b15bd49e4f63bb0.zip |
Merge pull request #6280 from nashby/private-try
Object#try can't call private methods
-rw-r--r-- | activesupport/CHANGELOG.md | 2 | ||||
-rw-r--r-- | activesupport/lib/active_support/core_ext/object/try.rb | 4 | ||||
-rw-r--r-- | activesupport/test/core_ext/object_and_class_ext_test.rb | 14 |
3 files changed, 17 insertions, 3 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index ef96df9227..fe322b4865 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,5 +1,7 @@ ## Rails 4.0.0 (unreleased) ## +* `Object#try` can't call private methods . *Vasiliy Ermolovich* + * `AS::Callbacks#run_callbacks` remove `key` argument. *Francesco Rodriguez* * `deep_dup` works more expectedly now and duplicates also values in +Hash+ instances and elements in +Array+ instances. *Alexey Gaziev* diff --git a/activesupport/lib/active_support/core_ext/object/try.rb b/activesupport/lib/active_support/core_ext/object/try.rb index e77a9da0ec..40a8101ca3 100644 --- a/activesupport/lib/active_support/core_ext/object/try.rb +++ b/activesupport/lib/active_support/core_ext/object/try.rb @@ -1,5 +1,5 @@ class Object - # Invokes the method identified by the symbol +method+, passing it any arguments + # Invokes the public method identified by the symbol +method+, passing it any arguments # and/or the block specified, just like the regular Ruby <tt>Object#send</tt> does. # # *Unlike* that method however, a +NoMethodError+ exception will *not* be raised @@ -29,7 +29,7 @@ class Object if a.empty? && block_given? yield self else - __send__(*a, &b) + public_send(*a, &b) end end end diff --git a/activesupport/test/core_ext/object_and_class_ext_test.rb b/activesupport/test/core_ext/object_and_class_ext_test.rb index b027fccab3..98ab82609e 100644 --- a/activesupport/test/core_ext/object_and_class_ext_test.rb +++ b/activesupport/test/core_ext/object_and_class_ext_test.rb @@ -101,7 +101,7 @@ class ObjectTryTest < ActiveSupport::TestCase assert !@string.respond_to?(method) assert_raise(NoMethodError) { @string.try(method) } end - + def test_nonexisting_method_with_arguments method = :undefined_method assert !@string.respond_to?(method) @@ -138,4 +138,16 @@ class ObjectTryTest < ActiveSupport::TestCase nil.try { ran = true } assert_equal false, ran end + + def test_try_with_private_method + klass = Class.new do + private + + def private_method + 'private method' + end + end + + assert_raise(NoMethodError) { klass.new.try(:private_method) } + end end |