From 1b5a323198654c04da0e7fcf3f5e5b1901bac7e6 Mon Sep 17 00:00:00 2001 From: Joel Chippindale Date: Wed, 13 Oct 2010 11:21:31 +0100 Subject: [PATCH] Fix Memoizable#prime_cache for private and protected methods [#5799 state:resolved] Matches change made in commit cc3183d4bec6855b9b5931759a22dd228dfe7687 for flushing cache. --- activesupport/lib/active_support/memoizable.rb | 2 +- activesupport/test/memoizable_test.rb | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/activesupport/lib/active_support/memoizable.rb b/activesupport/lib/active_support/memoizable.rb index 0a7bcd5..065e2a3 100644 --- a/activesupport/lib/active_support/memoizable.rb +++ b/activesupport/lib/active_support/memoizable.rb @@ -31,7 +31,7 @@ module ActiveSupport def prime_cache(*syms) syms.each do |sym| - methods.each do |m| + (methods + private_methods + protected_methods).each do |m| if m.to_s =~ /^_unmemoized_(#{sym})/ if method(m).arity == 0 __send__($1) diff --git a/activesupport/test/memoizable_test.rb b/activesupport/test/memoizable_test.rb index bceac13..6fa194d 100644 --- a/activesupport/test/memoizable_test.rb +++ b/activesupport/test/memoizable_test.rb @@ -101,6 +101,22 @@ class MemoizableTest < ActiveSupport::TestCase @count += 1 end memoize :counter + + protected + + def protected_counter + @protected_counter ||= 0 + @protected_counter += 1 + end + memoize :protected_counter + + private + + def private_counter + @private_counter ||= 0 + @private_counter += 1 + end + memoize :private_counter end def setup @@ -171,6 +187,8 @@ class MemoizableTest < ActiveSupport::TestCase def test_memoize_all @calculator.memoize_all assert @calculator.instance_variable_defined?(:@_memoized_counter) + assert @calculator.instance_variable_defined?(:@_memoized_protected_counter) + assert @calculator.instance_variable_defined?(:@_memoized_private_counter) end def test_memoization_cache_is_different_for_each_instance @@ -260,5 +278,4 @@ class MemoizableTest < ActiveSupport::TestCase assert_equal "Yes", person.send(:is_developer?) assert_equal 1, person.is_developer_calls end - end -- 1.7.3