memist 1.0.0 → 2.0.0
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/memist.rb +1 -5
- data/lib/memist/class_methods.rb +21 -0
- data/lib/memist/instance_methods.rb +21 -0
- data/lib/memist/memoizable.rb +11 -0
- data/lib/memist/version.rb +3 -0
- metadata +30 -7
- metadata.gz.sig +0 -0
- data/lib/memist/object.rb +0 -91
- data/lib/memist/railtie.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 87d64e83cf6fcd474d07bb4bd88e592620e6f888fee450da956b394cc25e9271
|
4
|
+
data.tar.gz: 7465bac42705e1783047eb7962bc970cafd77a1ae163e3a36d298af15b9bf2dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 055e3a715c240a1dbdd25d84e4a9cde9329344fb6fab22f21f7f5900fbfbc116c32a07253fe0d367aaa124a7b9efd2418809eea376874a38ecc8818314e8b659
|
7
|
+
data.tar.gz: 55bc4d7837f98cfba7779f650a1695067aca9ebd288348b85c7d19156b0084573dc44421f85dd4050bdec001635775114955ed450dea0d83bb5eca30eab7021d
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
ADDED
Binary file
|
data/lib/memist.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Memist
|
2
|
+
module ClassMethods
|
3
|
+
def memoize(method)
|
4
|
+
if instance_method(method).arity > 1
|
5
|
+
raise ArgumentError, "Cannot memoize `#{method}` method because it accepts more than one argument."
|
6
|
+
end
|
7
|
+
|
8
|
+
define_method "#{method}_with_memoization" do |arg = nil|
|
9
|
+
@memoized_values ||= Hash.new { |hash, key| hash[key] = {} }
|
10
|
+
if @memoized_values.key?(method) && @memoized_values[method].key?(arg)
|
11
|
+
@memoized_values[method][arg]
|
12
|
+
else
|
13
|
+
@memoized_values[method][arg] = send("#{method}_without_memoization", *arg)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
alias_method "#{method}_without_memoization", method
|
18
|
+
alias_method method, "#{method}_with_memoization"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Memist
|
2
|
+
module InstanceMethods
|
3
|
+
def flush_memoization(method = nil, arg = nil)
|
4
|
+
return if @memoized_values.nil?
|
5
|
+
|
6
|
+
if method && @memoized_values.key?(method.to_sym)
|
7
|
+
if arg.nil?
|
8
|
+
@memoized_values.delete(method.to_sym)
|
9
|
+
else
|
10
|
+
@memoized_values[method.to_sym].delete(arg)
|
11
|
+
end
|
12
|
+
else
|
13
|
+
@memoized_values = nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def memoized?(method)
|
18
|
+
!!(@memoized_values && @memoized_values.include?(method.to_sym))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: memist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Cooke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDZDCCAkygAwIBAgIBATANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQDDAJtZTEZ
|
14
|
+
MBcGCgmSJomT8ixkARkWCWFkYW1jb29rZTESMBAGCgmSJomT8ixkARkWAmlvMB4X
|
15
|
+
DTE5MDUxNDEzNTIxM1oXDTIwMDUxMzEzNTIxM1owPDELMAkGA1UEAwwCbWUxGTAX
|
16
|
+
BgoJkiaJk/IsZAEZFglhZGFtY29va2UxEjAQBgoJkiaJk/IsZAEZFgJpbzCCASIw
|
17
|
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUohRlPw3iIOhWZq+qf5N1ATm1H
|
18
|
+
7gBO4TpsUrw/FL/+urFExzt1+4MPfiKjILge48vKpjoTfuZusRsOQebaFidOfmhk
|
19
|
+
sEqa941CvN3OeUYARA53ORlmoLDLmdcrxq430+woFp4uuSYwim/2YQgIMdgiOTqs
|
20
|
+
cHaM9yh/xUGMnH4lB9bBDNfggMmkSFb6P8Ax4rvdX3EVv5P58RHwHszd+UI4fyy9
|
21
|
+
0W143m6ntNmqena4ZOc7HtWtRyDHHXXzlGgmghKEZgOA+/LO53VHp+cM0JqB7lq5
|
22
|
+
ZxN43fQrIT5yY9Dy7dRBeiDo53WNJPspa5soEivCBVYstMqfd+LGk/BnsyMCAwEA
|
23
|
+
AaNxMG8wCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFGlRGerNfr6J
|
24
|
+
Dprgl6DQ3kLvgVvPMBoGA1UdEQQTMBGBD21lQGFkYW1jb29rZS5pbzAaBgNVHRIE
|
25
|
+
EzARgQ9tZUBhZGFtY29va2UuaW8wDQYJKoZIhvcNAQEFBQADggEBAK2TQPMeW9qh
|
26
|
+
NDNoVbbplfSc8/uscSP2DfssCbhXQqeDfF2z+kQpxv8iAc++KTlotqOaX5A6RvLb
|
27
|
+
NvuwMHPJRQJ2e8rbuN8Sh3tUjbkAEv3SFw4hqbKmtp0j2oKBU0dxHWNfp+5ulh2l
|
28
|
+
UXnQAt4zg3v1hTD1VrwLqG/hyk9xAaWB38lEDBuPhLrDIdDJklg9bD1E2TUvoMrg
|
29
|
+
L6TIbdP1TRrxINO1D9GzboR+OuWos7qMLBEEbjat/fQchYrW1KLcHIUCyrGkZTLm
|
30
|
+
3wUJNGnT5XYq+qvTqmjkTSTfdGvZCM63C6bGdN5CAyMokGOOatGqyCMAONolWnfC
|
31
|
+
gm3t2GWWrxY=
|
32
|
+
-----END CERTIFICATE-----
|
33
|
+
date: 2019-10-17 00:00:00.000000000 Z
|
12
34
|
dependencies: []
|
13
35
|
description: A Ruby Memoization Helper
|
14
36
|
email:
|
@@ -18,8 +40,10 @@ extensions: []
|
|
18
40
|
extra_rdoc_files: []
|
19
41
|
files:
|
20
42
|
- lib/memist.rb
|
21
|
-
- lib/memist/
|
22
|
-
- lib/memist/
|
43
|
+
- lib/memist/class_methods.rb
|
44
|
+
- lib/memist/instance_methods.rb
|
45
|
+
- lib/memist/memoizable.rb
|
46
|
+
- lib/memist/version.rb
|
23
47
|
homepage: https://github.com/adamcooke/memist
|
24
48
|
licenses:
|
25
49
|
- MIT
|
@@ -39,8 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
39
63
|
- !ruby/object:Gem::Version
|
40
64
|
version: '0'
|
41
65
|
requirements: []
|
42
|
-
|
43
|
-
rubygems_version: 2.4.5
|
66
|
+
rubygems_version: 3.0.6
|
44
67
|
signing_key:
|
45
68
|
specification_version: 4
|
46
69
|
summary: A Ruby Memoization Helper
|
metadata.gz.sig
ADDED
Binary file
|
data/lib/memist/object.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
module Memist
|
2
|
-
|
3
|
-
module ClassMethods
|
4
|
-
def memoize(method, options = {})
|
5
|
-
if self.instance_method(method).arity > 0
|
6
|
-
raise "Cannot memoize `#{method}` method because it accepts an argument."
|
7
|
-
end
|
8
|
-
|
9
|
-
define_method "#{method}_with_memoization" do
|
10
|
-
@memoized_values ||= {}
|
11
|
-
if @memoized_values.has_key?(method)
|
12
|
-
@memoized_values[method].memoized!
|
13
|
-
else
|
14
|
-
@memoized_values[method] = send("#{method}_without_memoization")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
self.memoized_methods[method] = options
|
19
|
-
|
20
|
-
if options[:uses].is_a?(Array)
|
21
|
-
options[:uses].each do |field|
|
22
|
-
self.attributes_to_clear_memoization[field] ||= []
|
23
|
-
self.attributes_to_clear_memoization[field] << method
|
24
|
-
|
25
|
-
# Automatically create an override setter to flush the memoization cache
|
26
|
-
# whenever the value is set.
|
27
|
-
if instance_methods.include?("#{field}=".to_sym) && !instance_methods.include?("#{field}_with_memoization_flush=")
|
28
|
-
define_method "#{field}_with_memoization_flush=" do |value|
|
29
|
-
self.flush_memoization_by_attribute(field)
|
30
|
-
send("#{field}_without_memoization_flush=", value)
|
31
|
-
end
|
32
|
-
alias_method "#{field}_without_memoization_flush=", "#{field}="
|
33
|
-
alias_method "#{field}=", "#{field}_with_memoization_flush="
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
alias_method "#{method}_without_memoization", method
|
40
|
-
alias_method method, "#{method}_with_memoization"
|
41
|
-
end
|
42
|
-
|
43
|
-
def attributes_to_clear_memoization
|
44
|
-
@attributes_to_clear_memoization ||= {}
|
45
|
-
end
|
46
|
-
|
47
|
-
def memoized_methods
|
48
|
-
@memoized_methods ||= {}
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
module InstanceMethods
|
54
|
-
def memoized!
|
55
|
-
@memoized = true unless frozen?
|
56
|
-
self
|
57
|
-
end
|
58
|
-
|
59
|
-
def memoized?
|
60
|
-
!!@memoized
|
61
|
-
end
|
62
|
-
|
63
|
-
def write_attribute_with_memoization_flush(attr_name, value)
|
64
|
-
flush_memoization_by_attribute(attr_name)
|
65
|
-
write_attribute_without_memoization_flush(attr_name, value)
|
66
|
-
end
|
67
|
-
|
68
|
-
def flush_memoization_by_attribute(attribute)
|
69
|
-
if methods = self.class.attributes_to_clear_memoization[attribute.to_sym]
|
70
|
-
methods.each do |method|
|
71
|
-
self.flush_memoization_cache(method)
|
72
|
-
self.flush_memoization_by_attribute(method)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def flush_memoization_cache(method = nil)
|
78
|
-
if method
|
79
|
-
if @memoized_values
|
80
|
-
@memoized_values.delete(method)
|
81
|
-
end
|
82
|
-
else
|
83
|
-
@memoized_values = nil
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
Object.send :include, InstanceMethods
|
89
|
-
Object.extend ClassMethods
|
90
|
-
|
91
|
-
end
|
data/lib/memist/railtie.rb
DELETED