Skip to content
Browse files

make private_and_public_methods unmemoizable [#2372 state:resolved]

Signed-off-by: Joshua Peek <josh@joshpeek.com>
  • Loading branch information...
1 parent 9e29c08 commit cc3183d4bec6855b9b5931759a22dd228dfe7687 @jeem jeem committed with josh Aug 9, 2009
View
2 activesupport/lib/active_support/memoizable.rb
@@ -43,7 +43,7 @@ def prime_cache(*syms)
def flush_cache(*syms, &block)
syms.each do |sym|
- methods.each do |m|
+ (methods + private_methods + protected_methods).each do |m|
if m.to_s =~ /^_unmemoized_(#{sym})/
ivar = ActiveSupport::Memoizable.memoized_ivar_for($1)
instance_variable_get(ivar).clear if instance_variable_defined?(ivar)
View
44 activesupport/test/flush_cache_on_private_memoization_test.rb
@@ -0,0 +1,44 @@
+require 'rubygems'
+require 'activesupport'
+require 'test/unit'
+
+class FlashCacheOnPrivateMemoizationTest < Test::Unit::TestCase
+ extend ActiveSupport::Memoizable
+
+ def test_public
+ assert_method_unmemoizable :pub
+ end
+
+ def test_protected
+ assert_method_unmemoizable :prot
+ end
+
+ def test_private
+ assert_method_unmemoizable :priv
+ end
+
+ def pub; rand end
+ memoize :pub
+
+ protected
+
+ def prot; rand end
+ memoize :prot
+
+ private
+
+ def priv; rand end
+ memoize :priv
+
+ def assert_method_unmemoizable(meth, message=nil)
+ full_message = build_message(message, "<?> not unmemoizable.\n", meth)
+ assert_block(full_message) do
+ a = send meth
+ b = send meth
+ unmemoize_all
+ c = send meth
+ a == b && a != c
+ end
+ end
+
+end

0 comments on commit cc3183d

Please sign in to comment.
Something went wrong with that request. Please try again.