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 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: []