<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -5,28 +5,30 @@ module ActiveSupport
     end
 
     module ClassMethods
-      def memoize(symbol)
-        original_method = &quot;_unmemoized_#{symbol}&quot;
-        memoized_ivar = &quot;@_memoized_#{symbol}&quot;
-        raise &quot;Already memoized #{symbol}&quot; if instance_methods.map(&amp;:to_s).include?(original_method)
+      def memoize(*symbols)
+        symbols.each do |symbol|
+          original_method = &quot;unmemoized_#{symbol}&quot;
+          memoized_ivar = &quot;@#{symbol}&quot;
+          raise &quot;Already memoized #{symbol}&quot; if instance_methods.map(&amp;:to_s).include?(original_method)
 
-        alias_method original_method, symbol
-        class_eval &lt;&lt;-EOS, __FILE__, __LINE__
-          def #{symbol}
-            if defined? #{memoized_ivar}
-              #{memoized_ivar}
-            else
-              #{memoized_ivar} = #{original_method}
+          alias_method original_method, symbol
+          class_eval &lt;&lt;-EOS, __FILE__, __LINE__
+            def #{symbol}(reload = false)
+              if !reload &amp;&amp; defined? #{memoized_ivar}
+                #{memoized_ivar}
+              else
+                #{memoized_ivar} = #{original_method}.freeze
+              end
             end
-          end
-        EOS
+          EOS
+        end
       end
     end
 
     def freeze
       methods.each do |method|
-        if m = method.to_s.match(/\A_unmemoized_(.*)/)
-          send(m[1]).freeze
+        if m = method.to_s.match(/\Aunmemoized_(.*)/)
+          send(m[1])
         end
       end
       super</diff>
      <filename>activesupport/lib/active_support/memoizable.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,12 +8,16 @@ uses_mocha 'Memoizable' do
       def name
         fetch_name_from_floppy
       end
-      memoize :name
 
       def age
         nil
       end
-      memoize :age
+
+      def random
+        rand(0)
+      end
+
+      memoize :name, :age, :random
 
       private
         def fetch_name_from_floppy
@@ -21,25 +25,34 @@ uses_mocha 'Memoizable' do
         end
     end
 
+    def setup
+      @person = Person.new
+    end
+
     def test_memoization
-      person = Person.new
-      assert_equal &quot;Josh&quot;, person.name
+      assert_equal &quot;Josh&quot;, @person.name
+
+      @person.expects(:fetch_name_from_floppy).never
+      2.times { assert_equal &quot;Josh&quot;, @person.name }
+    end
 
-      person.expects(:fetch_name_from_floppy).never
-      2.times { assert_equal &quot;Josh&quot;, person.name }
+    def test_reloadable
+      random = @person.random
+      assert_equal random, @person.random
+      assert_not_equal random, @person.random(:reload)
     end
 
     def test_memoized_methods_are_frozen
-      person = Person.new
-      person.freeze
-      assert_equal &quot;Josh&quot;, person.name
-      assert_equal true, person.name.frozen?
+      assert_equal true, @person.name.frozen?
+
+      @person.freeze
+      assert_equal &quot;Josh&quot;, @person.name
+      assert_equal true, @person.name.frozen?
     end
 
     def test_memoization_frozen_with_nil_value
-      person = Person.new
-      person.freeze
-      assert_equal nil, person.age
+      @person.freeze
+      assert_equal nil, @person.age
     end
 
     def test_double_memoization</diff>
      <filename>activesupport/test/memoizable_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7430c4168fad07b480dbf80c8ac75ba7db8c634f</id>
    </parent>
  </parents>
  <author>
    <name>Joshua Peek</name>
    <login>josh</login>
    <email>josh@joshpeek.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/e1f23da53cef20a60e4bf458d959fe2bfe7d52ea</url>
  <id>e1f23da53cef20a60e4bf458d959fe2bfe7d52ea</id>
  <committed-date>2008-07-18T09:19:38-07:00</committed-date>
  <authored-date>2008-07-18T09:18:16-07:00</authored-date>
  <message>Allow memoized methods to be reloaded and allow multiple symbols</message>
  <tree>97753d4e40ef08da5c0827b51e03a4e7f5c8c276</tree>
  <committer>
    <name>Joshua Peek</name>
    <login>josh</login>
    <email>josh@joshpeek.com</email>
  </committer>
</commit>
