public
Fork of rails/rails
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/JackDanger/rails.git
Fixed memoize with punctuation and freezing memoized methods with 
arguments

Signed-off-by: Joshua Peek <josh@joshpeek.com>
jeremy (author)
Thu Aug 07 12:55:14 -0700 2008
josh (committer)
Thu Aug 07 12:55:14 -0700 2008
commit  a8057669ff6ba11e228fc73eef7390b826d0de25
tree    fab205b4b3900d9c9a3ef0f169491ae94d327317
parent  105093f90728f81268367bd52581fccfa165f170
...
10
11
12
13
14
15
 
 
 
 
 
 
 
 
 
 
16
17
18
...
21
22
23
24
 
25
26
27
...
10
11
12
 
 
 
13
14
15
16
17
18
19
20
21
22
23
24
25
...
28
29
30
 
31
32
33
34
0
@@ -10,9 +10,16 @@ module ActiveSupport
0
       end
0
 
0
       def freeze_with_memoizable
0
- methods.each do |method|
0
- __send__($1) if method.to_s =~ /^_unmemoized_(.*)/
0
- end unless frozen?
0
+ unless frozen?
0
+ methods.each do |method|
0
+ if method.to_s =~ /^_unmemoized_(.*)/
0
+ begin
0
+ __send__($1)
0
+ rescue ArgumentError
0
+ end
0
+ end
0
+ end
0
+ end
0
 
0
         freeze_without_memoizable
0
       end
0
@@ -21,7 +28,7 @@ module ActiveSupport
0
     def memoize(*symbols)
0
       symbols.each do |symbol|
0
         original_method = "_unmemoized_#{symbol}"
0
- memoized_ivar = "@_memoized_#{symbol}"
0
+ memoized_ivar = "@_memoized_#{symbol.to_s.sub(/\?\Z/, '_query').sub(/!\Z/, '_bang')}"
0
 
0
         class_eval <<-EOS, __FILE__, __LINE__
0
           include Freezable
...
16
17
18
 
 
 
 
 
 
 
 
 
 
19
20
21
...
88
89
90
 
 
 
 
91
92
93
...
114
115
116
 
117
118
119
...
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
...
98
99
100
101
102
103
104
105
106
107
...
128
129
130
131
132
133
134
0
@@ -16,6 +16,16 @@ uses_mocha 'Memoizable' do
0
         "Josh"
0
       end
0
 
0
+ def name?
0
+ true
0
+ end
0
+ memoize :name?
0
+
0
+ def update(name)
0
+ "Joshua"
0
+ end
0
+ memoize :update
0
+
0
       def age
0
         @age_calls += 1
0
         nil
0
@@ -88,6 +98,10 @@ uses_mocha 'Memoizable' do
0
       assert_equal 1, @person.name_calls
0
     end
0
 
0
+ def test_memoization_with_punctuation
0
+ assert_equal true, @person.name?
0
+ end
0
+
0
     def test_memoization_with_nil_value
0
       assert_equal nil, @person.age
0
       assert_equal 1, @person.age_calls
0
@@ -114,6 +128,7 @@ uses_mocha 'Memoizable' do
0
     def test_memoized_is_not_affected_by_freeze
0
       @person.freeze
0
       assert_equal "Josh", @person.name
0
+ assert_equal "Joshua", @person.update("Joshua")
0
     end
0
 
0
     def test_memoization_with_args

Comments

    No one has commented yet.