memoit 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/memoit.rb +6 -1
- data/lib/memoit/version.rb +1 -1
- data/spec/memoit_spec.rb +10 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d5440f6ce3b976230858dcb48b83657621987ec
|
4
|
+
data.tar.gz: 1fe48fce65be49c139a83c3a0fe8c636af0b23ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 537902c0edacd41f6026d270fdc8ea85c151006a5200d57588d19bd701a0d55b9b853def246caa9b9a82ad2257b20f44b7db3d0a52644fce8a7b8ec9c7626d03
|
7
|
+
data.tar.gz: 701854fb5eca663e2ce7aee4071c437ed4b339c4cbd18eb1a21a656423bd4e84075a54741454e16fdf360efd1773a48ec33436bb51abb117541db8020b83fc75
|
data/lib/memoit.rb
CHANGED
@@ -16,7 +16,12 @@ module Memoit
|
|
16
16
|
define_method(name) do |*args, &block|
|
17
17
|
return super(*args, &block) if block
|
18
18
|
cache = instance_variable_get(ivar_name) || instance_variable_set(ivar_name, {})
|
19
|
-
|
19
|
+
hash = args.hash
|
20
|
+
if cache.has_key?(hash)
|
21
|
+
cache[hash]
|
22
|
+
else
|
23
|
+
cache[hash] = super(*args)
|
24
|
+
end
|
20
25
|
end
|
21
26
|
end
|
22
27
|
prepend mod
|
data/lib/memoit/version.rb
CHANGED
data/spec/memoit_spec.rb
CHANGED
@@ -10,6 +10,11 @@ describe Memoit do
|
|
10
10
|
memoize def bar(*values)
|
11
11
|
rand
|
12
12
|
end
|
13
|
+
|
14
|
+
memoize def falsy
|
15
|
+
foo
|
16
|
+
false
|
17
|
+
end
|
13
18
|
end
|
14
19
|
end
|
15
20
|
let(:instance) { klass.new }
|
@@ -31,5 +36,10 @@ describe Memoit do
|
|
31
36
|
it "ignores cache when block given" do
|
32
37
|
expect(instance.foo { }).not_to eq(instance.foo { })
|
33
38
|
end
|
39
|
+
|
40
|
+
it "caches falsy values" do
|
41
|
+
expect(instance).to receive(:foo).once
|
42
|
+
expect(instance.falsy).to eq(instance.falsy)
|
43
|
+
end
|
34
44
|
end
|
35
45
|
end
|