zache 0.10.0 → 0.10.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: cc076a4fc749fc00a9d894de37dbca8ae03a9c607d5bab39dc04b57fbbf182d6
4
- data.tar.gz: 1290c77d9339599eccafb37008b5a58561e901cbf76572f6a8538f7aeee42cc1
3
+ metadata.gz: aff25777e250a00476b61b3b8ff9e9d8492546b9e4c53fbdba28f7cba3c64a95
4
+ data.tar.gz: d7f7214d2829b7e2d513fa36b0de36326d9453ad33a41f21ab64485a263c3b6c
5
5
  SHA512:
6
- metadata.gz: fee403d8ede6cfcf64d1e417df1e1c83025aa0ee14eb21c34945a1c40b7473c936079285ab3b61584d4baf03e75928eb5cb01c5451d0b0365e7c51be695c80d1
7
- data.tar.gz: ff1d2b0e94dddd5c500a2a30e738bae6147a92ecd21b1f432a5cf5dc4df0a6ee23f5f632e1b28bf0575b740d2e1466ba661b9f32e33f4a9d05932fa4669716e1
6
+ metadata.gz: 401d5bcfb34777d3d0e0b22b0c65802bdd273eb9b3076710cfd8a31c63fa3f8f86fdda5c965f28bc599045c42fc24c187c0fa2bccb7fbd014cdfced6232bdcc1
7
+ data.tar.gz: 8993cc92f22c9941b457b8dfaa8ae86893015d996bde9ddcbc10a1459d2358310cea93097477f6f43fc7320e6e6b0f21e38a1a32fcedc1298edd0520f032dde6
@@ -14,6 +14,6 @@ Metrics/AbcSize:
14
14
  Metrics/MethodLength:
15
15
  Max: 30
16
16
  Metrics/CyclomaticComplexity:
17
- Max: 10
17
+ Max: 12
18
18
  Metrics/PerceivedComplexity:
19
- Max: 10
19
+ Max: 12
@@ -95,14 +95,15 @@ class Zache
95
95
  # If the <tt>dirty</tt> argument is set to <tt>true</tt>, a previously
96
96
  # calculated result will be returned if it exists and is already expired.
97
97
  def get(key, lifetime: 2**32, dirty: false)
98
- if (dirty || @dirty) && locked? && key_expired?(key) && @hash.key?(key)
99
- return @hash[key][:value]
100
- end
101
98
  if block_given?
99
+ if (dirty || @dirty) && locked? && key_expired?(key) && @hash.key?(key)
100
+ return @hash[key][:value]
101
+ end
102
102
  synchronized { calc(key, lifetime) { yield } }
103
103
  else
104
104
  rec = @hash[key]
105
105
  if key_expired?(key)
106
+ return rec[:value] if dirty || @dirty
106
107
  @hash.delete(key)
107
108
  rec = nil
108
109
  end
@@ -208,7 +208,7 @@ class ZacheTest < Minitest::Test
208
208
  end
209
209
 
210
210
  def test_returns_dirty_result
211
- cache = Zache.new
211
+ cache = Zache.new(dirty: true)
212
212
  cache.get(:x, lifetime: 0) { 1 }
213
213
  long = Thread.start do
214
214
  cache.get(:x) do
@@ -218,13 +218,21 @@ class ZacheTest < Minitest::Test
218
218
  end
219
219
  sleep 0.1
220
220
  Timeout.timeout(1) do
221
- assert(cache.exists?(:x, dirty: true))
222
- assert_equal(1, cache.get(:x, dirty: true))
223
- assert_equal(1, cache.get(:x, dirty: true) { 2 })
221
+ assert(cache.exists?(:x))
222
+ assert_equal(1, cache.get(:x))
223
+ assert_equal(1, cache.get(:x) { 2 })
224
224
  end
225
225
  long.kill
226
226
  end
227
227
 
228
+ def test_returns_dirty_result_when_not_locked
229
+ cache = Zache.new(dirty: true)
230
+ cache.get(:x, lifetime: 0) { 1 }
231
+ assert(cache.exists?(:x))
232
+ assert_equal(1, cache.get(:x))
233
+ assert_equal(2, cache.get(:x) { 2 })
234
+ end
235
+
228
236
  def test_fetches_multiple_keys_in_many_threads_in_dirty_mode
229
237
  cache = Zache.new(dirty: true)
230
238
  set = Concurrent::Set.new
@@ -31,7 +31,7 @@ Gem::Specification.new do |s|
31
31
  s.rubygems_version = '2.5'
32
32
  s.required_ruby_version = '>=2.5'
33
33
  s.name = 'zache'
34
- s.version = '0.10.0'
34
+ s.version = '0.10.1'
35
35
  s.license = 'MIT'
36
36
  s.summary = 'In-memory Cache'
37
37
  s.description = 'Zero-footprint in-memory thread-safe cache'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko