Skip to content

Commit 4c04589

Browse files
authored
Memoize can be a on its own line (#52)
1 parent f96c223 commit 4c04589

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

lib/memery.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ def included(base = nil, &block)
3838

3939
module ClassMethods
4040
def memoize(*method_names, condition: nil, ttl: nil)
41+
if method_names.empty?
42+
@_memery_memoize_next_method = { condition: condition, ttl: ttl }
43+
return
44+
end
4145
prepend_memery_module!
4246
method_names.each do |method_name|
4347
define_memoized_method!(method_name, condition: condition, ttl: ttl)
@@ -52,6 +56,15 @@ def memoized?(method_name)
5256
@_memery_module.private_method_defined?(method_name)
5357
end
5458

59+
def method_added(name)
60+
super
61+
62+
return unless @_memery_memoize_next_method
63+
64+
memoize(name, **@_memery_memoize_next_method)
65+
@_memery_memoize_next_method = nil
66+
end
67+
5568
private
5669

5770
def prepend_memery_module!

spec/memery_spec.rb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ class A
1414
m_private
1515
end
1616

17+
memoize
18+
def m_different_line
19+
CALLS << :m_different_line
20+
:m_different_line
21+
end
22+
1723
def not_memoized; end
1824

1925
memoize def m_nil
@@ -80,6 +86,13 @@ module M
8086
:m
8187
end
8288

89+
memoize
90+
91+
def m_different_line
92+
CALLS << :m_different_line
93+
:m_different_line
94+
end
95+
8396
def not_memoized; end
8497

8598
private
@@ -170,6 +183,14 @@ class H
170183
end
171184
end
172185

186+
context "methods without args memoize on new line" do
187+
specify do
188+
values = [ a.m_different_line, a.m_nil, a.m_different_line, a.m_nil ]
189+
expect(values).to eq([:m_different_line, nil, :m_different_line, nil])
190+
expect(CALLS).to eq([:m_different_line, nil])
191+
end
192+
end
193+
173194
context "flushing cache" do
174195
specify do
175196
values = [ a.m, a.m ]
@@ -294,6 +315,12 @@ class H
294315
expect(CALLS).to eq([:m])
295316
end
296317

318+
specify do
319+
values = [c.m_different_line, c.m_different_line, c.m_different_line]
320+
expect(values).to eq([:m_different_line, :m_different_line, :m_different_line])
321+
expect(CALLS).to eq([:m_different_line])
322+
end
323+
297324
context "memoization in class" do
298325
specify do
299326
values = [c.m_class, c.m_class, c.m_class]
@@ -480,6 +507,12 @@ class H
480507
it { is_expected.to be true }
481508
end
482509

510+
context "memoize is on a different line" do
511+
let(:method_name) { :m_different_line }
512+
513+
it { is_expected.to be true }
514+
end
515+
483516
context "private memoized method" do
484517
let(:method_name) { :m_private }
485518

0 commit comments

Comments
 (0)