memoize_until 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 572f76ed252765bca587e9d9d68fb28327c02783ac1066d061147315c542a996
4
- data.tar.gz: 36ef39ba60fba0f2ca3b0c26a9f082442f72ed4a1780952a79a78c1eb89305bf
3
+ metadata.gz: cef01fc07f2cd1bbce74ed4bfbd0037933dfe24e347e639090d2c009050cdf70
4
+ data.tar.gz: 38107311086fa799d489bdf0eabf253ed599997cad8af56cb80db7104598743b
5
5
  SHA512:
6
- metadata.gz: ae171d5e3b67e3c0cb79116c4436206031c7924088f4fdb446dc89d937a4144427905c42b64c77d92a5d15acb3a413b30ebe0f85ff03f333c22185c12f7de171
7
- data.tar.gz: a6f78d6a8097ae44332acd264b2a9e3df00ce0bca795e4f59c85bb1ce24ca08e348d6f357f0c6043c24365144c84fb8d42208a07620b8be6c3dea6f9befef61e
6
+ metadata.gz: 268c2cabb81fa7d67d205572eadb111f22348fa692e211780fb62beb46e1166c69bf0ccae3d626b9809718e1605ddfcdd1e91992eada7366ccf9ee33ad482f7f
7
+ data.tar.gz: 6bc413d58e54c10c16284423d7b5af9ce4640faa9869f018691a24fe2e41d96f0b3a7bba054f007fedd834866af68bd46a926377e2fa3e1f34157e630a6e6997
data/.gitignore CHANGED
@@ -9,4 +9,5 @@
9
9
  /tmp/
10
10
  .vscode/
11
11
  *.gem
12
- .DS_Store
12
+ .DS_Store
13
+ .byebug_history
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.1
1
+ 1.3.0
@@ -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
- unless value
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
- _store[key] ||= {}
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
- _store[key] = {}
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
- _store[key][now] = nil
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
- _store[key][now] = set_nil(value)
63
+ _mutex.synchronize do
64
+ _store[key][now] = value
65
+ end
57
66
  end
58
67
 
59
68
  def get(key, now)
60
- purpose = _store[key]
61
- raise NotImplementedError unless purpose
62
- purpose[now]
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.2.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: 2020-05-08 00:00:00.000000000 Z
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.6
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: []