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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87d64e83cf6fcd474d07bb4bd88e592620e6f888fee450da956b394cc25e9271
4
- data.tar.gz: 7465bac42705e1783047eb7962bc970cafd77a1ae163e3a36d298af15b9bf2dd
3
+ metadata.gz: 84de3c6c331c88780477146d8b16c76a692590b8f737e5500654170bbf64011d
4
+ data.tar.gz: 5628c558f0e0bbef06e3a8d6f26c206c746c99277f09f9ce22d9023adc5c0b07
5
5
  SHA512:
6
- metadata.gz: 055e3a715c240a1dbdd25d84e4a9cde9329344fb6fab22f21f7f5900fbfbc116c32a07253fe0d367aaa124a7b9efd2418809eea376874a38ecc8818314e8b659
7
- data.tar.gz: 55bc4d7837f98cfba7779f650a1695067aca9ebd288348b85c7d19156b0084573dc44421f85dd4050bdec001635775114955ed450dea0d83bb5eca30eab7021d
6
+ metadata.gz: 3eb1ea75188ba3c703d9c92ad8b19adbaee32de8085b0dad3823506e22b2370f92757df3c2136cdc8bb06b96d3b317f7d7428c9209c0db5db17b8ec3f7b168d1
7
+ data.tar.gz: ccf327df4e81b7bc905383446207f2c2fa09a6e7327081a4ba69b9c2868a7177fea8332fade6b42c138a59ad32236b9c3c4a5d423ab79307bb950d3a1928e02f
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -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
- @memoized_values[method][arg] = send("#{method}_without_memoization", *arg)
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
- else
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
@@ -1,3 +1,3 @@
1
1
  module Memist
2
- VERSION = '2.0.0'.freeze
2
+ VERSION = '2.0.1'.freeze
3
3
  end
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.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-17 00:00:00.000000000 Z
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