diff options
author | Niels Ganser <niels@herimedia.com> | 2009-03-06 14:40:54 +0000 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2009-03-06 14:41:13 +0000 |
commit | c67d25e3c4e636d7c94909a7398231a634accf46 (patch) | |
tree | 254deda1b6961b476b505d9b8f0fe65bb637ef48 | |
parent | e97180c273ada9b252ddf42d340d2947a509cb26 (diff) | |
download | rails-c67d25e3c4e636d7c94909a7398231a634accf46.tar.gz rails-c67d25e3c4e636d7c94909a7398231a634accf46.tar.bz2 rails-c67d25e3c4e636d7c94909a7398231a634accf46.zip |
Ensure ActiveSupport::Memoizable respects private methods. [#2138 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
-rw-r--r-- | activesupport/lib/active_support/memoizable.rb | 4 | ||||
-rw-r--r-- | activesupport/test/memoizable_test.rb | 23 |
2 files changed, 26 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/memoizable.rb b/activesupport/lib/active_support/memoizable.rb index 952b4d8063..71cfe61739 100644 --- a/activesupport/lib/active_support/memoizable.rb +++ b/activesupport/lib/active_support/memoizable.rb @@ -89,6 +89,10 @@ module ActiveSupport end # end end # end end # end + # + if private_method_defined?(#{original_method.inspect}) # if private_method_defined?(:_unmemoized_mime_type) + private #{symbol.inspect} # private :mime_type + end # end EOS end end diff --git a/activesupport/test/memoizable_test.rb b/activesupport/test/memoizable_test.rb index 069ae27eb2..39420c5a3a 100644 --- a/activesupport/test/memoizable_test.rb +++ b/activesupport/test/memoizable_test.rb @@ -4,10 +4,12 @@ class MemoizableTest < Test::Unit::TestCase class Person extend ActiveSupport::Memoizable - attr_reader :name_calls, :age_calls + attr_reader :name_calls, :age_calls, :is_developer_calls + def initialize @name_calls = 0 @age_calls = 0 + @is_developer_calls = 0 end def name @@ -31,6 +33,14 @@ class MemoizableTest < Test::Unit::TestCase end memoize :name, :age + + private + + def is_developer? + @is_developer_calls += 1 + "Yes" + end + memoize :is_developer? end class Company @@ -223,4 +233,15 @@ class MemoizableTest < Test::Unit::TestCase company.memoize :name assert_raise(RuntimeError) { company.memoize :name } end + + def test_private_method_memoization + person = Person.new + + assert_raise(NoMethodError) { person.is_developer? } + assert_equal "Yes", person.send(:is_developer?) + assert_equal 1, person.is_developer_calls + assert_equal "Yes", person.send(:is_developer?) + assert_equal 1, person.is_developer_calls + end + end |