Take the 2008 Git User's Survey and help out! [ hide ]

public
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/rails/rails.git
Search Repo:
Ruby 1.9: Ensure Memoizable#freeze is only overriden once to avoid an 
endless loop
josh (author)
Fri Jul 18 21:30:36 -0700 2008
commit  c609be45966316bb107e0bad2b0935ac4a0d0c41
tree    d1663e5137a68000678a15e4369281a79cd4b2ae
parent  d39485078ec56e25a96e97d44b53498d8a1c7426
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
23
24
25
 
 
 
 
 
 
 
 
 
 
 
 
26
27
28
...
1
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
4
5
...
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
0
@@ -1,19 +1,5 @@
0
 module ActiveSupport
0
   module Memoizable #:nodoc:
0
- def self.extended(obj)
0
- klass = obj.respond_to?(:class_eval) ? obj : obj.metaclass
0
- klass.class_eval do
0
- def freeze
0
- methods.each do |method|
0
- if m = method.to_s.match(/^unmemoized_(.*)/)
0
- send(m[1])
0
- end
0
- end
0
- super
0
- end
0
- end
0
- end
0
-
0
     def memoize(*symbols)
0
       symbols.each do |symbol|
0
         original_method = "unmemoized_#{symbol}"
0
@@ -23,6 +9,18 @@ module ActiveSupport
0
         raise "Already memoized #{symbol}" if klass.instance_methods.map(&:to_s).include?(original_method)
0
 
0
         klass.class_eval <<-EOS, __FILE__, __LINE__
0
+ unless instance_methods.map(&:to_s).include?("freeze_without_memoizable")
0
+ alias_method :freeze_without_memoizable, :freeze
0
+ def freeze
0
+ methods.each do |method|
0
+ if m = method.to_s.match(/^unmemoized_(.*)/)
0
+ send(m[1])
0
+ end
0
+ end
0
+ freeze_without_memoizable
0
+ end
0
+ end
0
+
0
           alias_method :#{original_method}, :#{symbol}
0
           def #{symbol}(reload = false)
0
             if !reload && defined? #{memoized_ivar}

Comments

    No one has commented yet.