From dec29c4194906565ab5366122a5bf9af860c8216 Mon Sep 17 00:00:00 2001 From: Eugene Pimenov Date: Sun, 5 Oct 2008 03:48:21 +0400 Subject: [PATCH] memoize_all fails when method has query or bang at the end and arity > 0 --- activesupport/lib/active_support/memoizable.rb | 4 ++-- activesupport/test/memoizable_test.rb | 22 +++++++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/activesupport/lib/active_support/memoizable.rb b/activesupport/lib/active_support/memoizable.rb index 4786fd6..7319e02 100644 --- a/activesupport/lib/active_support/memoizable.rb +++ b/activesupport/lib/active_support/memoizable.rb @@ -20,7 +20,7 @@ module ActiveSupport if method(m).arity == 0 __send__($1) else - ivar = :"@_memoized_#{$1}" + ivar = :"@_memoized_#{$1.sub(/\?\Z/, '_query').sub(/!\Z/, '_bang')}" instance_variable_set(ivar, {}) end end @@ -30,7 +30,7 @@ module ActiveSupport def unmemoize_all methods.each do |m| if m.to_s =~ /^_unmemoized_(.*)/ - ivar = :"@_memoized_#{$1}" + ivar = :"@_memoized_#{$1.sub(/\?\Z/, '_query').sub(/!\Z/, '_bang')}" instance_variable_get(ivar).clear if instance_variable_defined?(ivar) end end diff --git a/activesupport/test/memoizable_test.rb b/activesupport/test/memoizable_test.rb index 135d56f..85b01d4 100644 --- a/activesupport/test/memoizable_test.rb +++ b/activesupport/test/memoizable_test.rb @@ -31,7 +31,7 @@ uses_mocha 'Memoizable' do nil end - memoize :name, :age + memoize :name, :age end class Company @@ -209,5 +209,25 @@ uses_mocha 'Memoizable' do company.memoize :name assert_raise(RuntimeError) { company.memoize :name } end + + def test_memoize_query_and_bang_with_arg + klass = Class.new + klass.class_eval do + extend ActiveSupport::Memoizable + def can_memoize_question?(args) + args + end + memoize :can_memoize_question? + + def memoize_bang!(args) + args + end + memoize :memoize_bang! + end + + obj = klass.new + obj.memoize_all + obj.unmemoize_all + end end end -- 1.6.0.2.g2ebc0