memist 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/memist/class_methods.rb +19 -2
- data/lib/memist/instance_methods.rb +11 -1
- data/lib/memist/version.rb +1 -1
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84de3c6c331c88780477146d8b16c76a692590b8f737e5500654170bbf64011d
|
4
|
+
data.tar.gz: 5628c558f0e0bbef06e3a8d6f26c206c746c99277f09f9ce22d9023adc5c0b07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3eb1ea75188ba3c703d9c92ad8b19adbaee32de8085b0dad3823506e22b2370f92757df3c2136cdc8bb06b96d3b317f7d7428c9209c0db5db17b8ec3f7b168d1
|
7
|
+
data.tar.gz: ccf327df4e81b7bc905383446207f2c2fa09a6e7327081a4ba69b9c2868a7177fea8332fade6b42c138a59ad32236b9c3c4a5d423ab79307bb950d3a1928e02f
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/memist/class_methods.rb
CHANGED
@@ -1,21 +1,38 @@
|
|
1
1
|
module Memist
|
2
2
|
module ClassMethods
|
3
|
-
def memoize(method)
|
3
|
+
def memoize(method, options = {})
|
4
4
|
if instance_method(method).arity > 1
|
5
5
|
raise ArgumentError, "Cannot memoize `#{method}` method because it accepts more than one argument."
|
6
6
|
end
|
7
7
|
|
8
|
+
if options[:depends_on].is_a?(Array)
|
9
|
+
options[:depends_on].each do |other_method|
|
10
|
+
memoization_dependencies[method.to_sym] ||= []
|
11
|
+
memoization_dependencies[method.to_sym] << other_method.to_sym
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
8
15
|
define_method "#{method}_with_memoization" do |arg = nil|
|
9
16
|
@memoized_values ||= Hash.new { |hash, key| hash[key] = {} }
|
10
17
|
if @memoized_values.key?(method) && @memoized_values[method].key?(arg)
|
11
18
|
@memoized_values[method][arg]
|
12
19
|
else
|
13
|
-
|
20
|
+
value = send("#{method}_without_memoization", *arg)
|
21
|
+
@memoized_values[method][arg] = value
|
14
22
|
end
|
15
23
|
end
|
16
24
|
|
25
|
+
define_method "#{method}!" do |arg = nil|
|
26
|
+
flush_memoization(method, arg)
|
27
|
+
send("#{method}_with_memoization", *arg)
|
28
|
+
end
|
29
|
+
|
17
30
|
alias_method "#{method}_without_memoization", method
|
18
31
|
alias_method method, "#{method}_with_memoization"
|
19
32
|
end
|
33
|
+
|
34
|
+
def memoization_dependencies
|
35
|
+
@memoization_dependencies ||= {}
|
36
|
+
end
|
20
37
|
end
|
21
38
|
end
|
@@ -4,16 +4,26 @@ module Memist
|
|
4
4
|
return if @memoized_values.nil?
|
5
5
|
|
6
6
|
if method && @memoized_values.key?(method.to_sym)
|
7
|
+
flush_memoization_dependencies(method, arg)
|
7
8
|
if arg.nil?
|
8
9
|
@memoized_values.delete(method.to_sym)
|
9
10
|
else
|
10
11
|
@memoized_values[method.to_sym].delete(arg)
|
11
12
|
end
|
12
|
-
|
13
|
+
elsif method.nil?
|
13
14
|
@memoized_values = nil
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
18
|
+
def flush_memoization_dependencies(method, arg = nil)
|
19
|
+
deps = self.class.memoization_dependencies[method.to_sym]
|
20
|
+
return false if deps.nil? || deps.empty?
|
21
|
+
|
22
|
+
deps.each do |dep|
|
23
|
+
flush_memoization(dep, arg)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
17
27
|
def memoized?(method)
|
18
28
|
!!(@memoized_values && @memoized_values.include?(method.to_sym))
|
19
29
|
end
|
data/lib/memist/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: memist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Cooke
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
3wUJNGnT5XYq+qvTqmjkTSTfdGvZCM63C6bGdN5CAyMokGOOatGqyCMAONolWnfC
|
31
31
|
gm3t2GWWrxY=
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2019-10-
|
33
|
+
date: 2019-10-18 00:00:00.000000000 Z
|
34
34
|
dependencies: []
|
35
35
|
description: A Ruby Memoization Helper
|
36
36
|
email:
|
metadata.gz.sig
CHANGED
Binary file
|