memoize_until 1.2.1 → 1.3.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 +4 -4
- data/.gitignore +2 -1
- data/VERSION +1 -1
- data/lib/memoize_until/store.rb +21 -10
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cef01fc07f2cd1bbce74ed4bfbd0037933dfe24e347e639090d2c009050cdf70
|
|
4
|
+
data.tar.gz: 38107311086fa799d489bdf0eabf253ed599997cad8af56cb80db7104598743b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 268c2cabb81fa7d67d205572eadb111f22348fa692e211780fb62beb46e1166c69bf0ccae3d626b9809718e1605ddfcdd1e91992eada7366ccf9ee33ad482f7f
|
|
7
|
+
data.tar.gz: 6bc413d58e54c10c16284423d7b5af9ce4640faa9869f018691a24fe2e41d96f0b3a7bba054f007fedd834866af68bd46a926377e2fa3e1f34157e630a6e6997
|
data/.gitignore
CHANGED
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.3.0
|
data/lib/memoize_until/store.rb
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
class MemoizeUntil
|
|
2
2
|
class Store
|
|
3
|
-
attr_reader :_store, :_kind
|
|
3
|
+
attr_reader :_store, :_kind, :_mutex
|
|
4
4
|
|
|
5
5
|
def initialize(kind)
|
|
6
6
|
@_store = {}
|
|
7
7
|
@_kind = kind
|
|
8
|
+
@_mutex = Mutex.new
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
# returns the value from memory if already memoized for "now" for the given key
|
|
@@ -13,23 +14,29 @@ class MemoizeUntil
|
|
|
13
14
|
def fetch(key, &block)
|
|
14
15
|
now = Time.now.public_send(_kind)
|
|
15
16
|
value = get(key, now)
|
|
16
|
-
|
|
17
|
+
|
|
18
|
+
if value.nil?
|
|
17
19
|
clear_all(key)
|
|
18
|
-
value = set(key, now, yield)
|
|
20
|
+
value = set(key, now, set_nil(yield))
|
|
19
21
|
end
|
|
22
|
+
|
|
20
23
|
unset_nil(value)
|
|
21
24
|
end
|
|
22
25
|
|
|
23
26
|
# add runtime keys
|
|
24
27
|
def add(key)
|
|
25
|
-
|
|
28
|
+
_mutex.synchronize do
|
|
29
|
+
_store[key] ||= {}
|
|
30
|
+
end
|
|
26
31
|
end
|
|
27
32
|
|
|
28
33
|
# clears all previously memoized values for the given key
|
|
29
34
|
# only clears memory in the process that this code runs.
|
|
30
35
|
# added for supporting fetch and custom scripts
|
|
31
36
|
def clear_all(key)
|
|
32
|
-
|
|
37
|
+
_mutex.synchronize do
|
|
38
|
+
_store[key] = {}
|
|
39
|
+
end
|
|
33
40
|
end
|
|
34
41
|
|
|
35
42
|
# clears previously memoized value for "now" for the given key
|
|
@@ -37,7 +44,7 @@ class MemoizeUntil
|
|
|
37
44
|
# added for supporting custom scripts / test cases
|
|
38
45
|
def clear_now(key)
|
|
39
46
|
now = Time.now.public_send(_kind)
|
|
40
|
-
|
|
47
|
+
set(key, now, nil)
|
|
41
48
|
end
|
|
42
49
|
|
|
43
50
|
private
|
|
@@ -53,13 +60,17 @@ class MemoizeUntil
|
|
|
53
60
|
end
|
|
54
61
|
|
|
55
62
|
def set(key, now, value)
|
|
56
|
-
|
|
63
|
+
_mutex.synchronize do
|
|
64
|
+
_store[key][now] = value
|
|
65
|
+
end
|
|
57
66
|
end
|
|
58
67
|
|
|
59
68
|
def get(key, now)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
69
|
+
_mutex.synchronize do
|
|
70
|
+
purpose = _store[key]
|
|
71
|
+
raise NotImplementedError unless purpose
|
|
72
|
+
purpose[now]
|
|
73
|
+
end
|
|
63
74
|
end
|
|
64
75
|
end
|
|
65
76
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: memoize_until
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ritikesh
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-03-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: concurrent-ruby
|
|
@@ -70,7 +70,7 @@ metadata:
|
|
|
70
70
|
allowed_push_host: https://rubygems.org
|
|
71
71
|
homepage_uri: https://github.com/freshdesk/memoize_until
|
|
72
72
|
source_code_uri: https://github.com/freshdesk/memoize_until
|
|
73
|
-
post_install_message:
|
|
73
|
+
post_install_message:
|
|
74
74
|
rdoc_options: []
|
|
75
75
|
require_paths:
|
|
76
76
|
- lib
|
|
@@ -85,8 +85,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
85
85
|
- !ruby/object:Gem::Version
|
|
86
86
|
version: '0'
|
|
87
87
|
requirements: []
|
|
88
|
-
rubygems_version: 3.0.
|
|
89
|
-
signing_key:
|
|
88
|
+
rubygems_version: 3.0.9
|
|
89
|
+
signing_key:
|
|
90
90
|
specification_version: 4
|
|
91
91
|
summary: Local Memoization Pattern!
|
|
92
92
|
test_files: []
|