@@ -134,12 +134,33 @@ def self.macro(name)
134
134
macro memoize def g ; end
135
135
end
136
136
137
+ class H
138
+ include Memery
139
+
140
+ [ :a , :b , :m , :n , :x , :y ] . each do |name |
141
+ define_method ( name ) do
142
+ CALLS << name
143
+ name
144
+ end
145
+ end
146
+
147
+ memoize :m , :n
148
+ memoize :x , :y , ttl : 3
149
+ end
150
+
137
151
RSpec . describe Memery do
138
152
subject ( :a ) { A . new }
139
153
140
154
before { CALLS . clear }
141
155
before { B_CALLS . clear }
142
156
157
+ let ( :unmemoized_class ) do
158
+ Class . new do
159
+ include Memery
160
+ attr_reader :a , :b , :m , :n , :x , :y
161
+ end
162
+ end
163
+
143
164
context "methods without args" do
144
165
specify do
145
166
values = [ a . m , a . m_nil , a . m , a . m_nil ]
@@ -366,6 +387,40 @@ def self.macro(name)
366
387
end
367
388
end
368
389
390
+ describe "with multiple methods" do
391
+ let ( :h ) { H . new }
392
+
393
+ specify do
394
+ values = [ h . m , h . n , h . m , h . n ]
395
+ expect ( values ) . to eq ( [ :m , :n , :m , :n ] )
396
+ expect ( CALLS ) . to eq ( [ :m , :n ] )
397
+ end
398
+
399
+ specify do
400
+ values = [ h . x , h . y , h . x , h . y ]
401
+ expect ( values ) . to eq ( [ :x , :y , :x , :y ] )
402
+ expect ( CALLS ) . to eq ( [ :x , :y ] )
403
+ end
404
+
405
+ specify do
406
+ expect ( unmemoized_class . memoize ( :x , :y , ttl : 3 ) ) . to eq ( [ :x , :y ] )
407
+ end
408
+ end
409
+
410
+ describe ".memoize return value" do
411
+ specify do
412
+ expect ( unmemoized_class . memoize ( :x ) ) . to eq ( :x )
413
+ expect ( unmemoized_class . memoize ( :m , ttl : 3 ) ) . to eq ( :m )
414
+ expect ( unmemoized_class . memoize ( :a , condition : -> { 1 == 2 } ) ) . to eq ( :a )
415
+ end
416
+
417
+ specify do
418
+ expect ( unmemoized_class . memoize ( :x , :y ) ) . to eq ( [ :x , :y ] )
419
+ expect ( unmemoized_class . memoize ( :m , :n , ttl : 3 ) ) . to eq ( [ :m , :n ] )
420
+ expect ( unmemoized_class . memoize ( :a , :b , condition : -> { 1 == 2 } ) ) . to eq ( [ :a , :b ] )
421
+ end
422
+ end
423
+
369
424
describe ".memoized?" do
370
425
subject { object . memoized? ( method_name ) }
371
426
0 commit comments