zache 0.10.0 → 0.10.1

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