caches 0.0.6 → 0.0.7

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
  SHA1:
3
- metadata.gz: 413c1adc86d415334b1ff133cf124fe7f82a4831
4
- data.tar.gz: 90d46e2b56699932fe3e1b76699fb92c37b23d7f
3
+ metadata.gz: 443cc1eff19b292441d504e849ba7cfe09931f03
4
+ data.tar.gz: 18ab2f338cada16695d69e18452f223c276c7050
5
5
  SHA512:
6
- metadata.gz: a461ad78571ebf10c4b54fc9ec00122750b1b71754e7a2b07080c12b634009c2e02adcbc6eb0d1532ad657419752e7d4217e09a61a256ae116916926d7c7380e
7
- data.tar.gz: e8f5022d40eecfc8c386d41ecc35812c1b071bf0b36dd518eec449e057b2b33f71f669634c792b30b7b30535a49a6dbd999f81c98ded88ac873fc59fbef2c657
6
+ metadata.gz: 7902d5bb624352d4c0122d247f09ba28dfe41ca68f3041bccc83f7035799102299b2c084d7a2a5bb98071358febc3bff51c7b59516182d6bcb89c55e738c5191
7
+ data.tar.gz: 38f8cdec9b5e46634c2cdd9b4124a6f17c70171813fcecc56e1c2242961b359d27bb47273c0a3edb6f4c4a5e3cfc0ebda9d4f4e2c7a7a89547ea24abc5ad61f8
data/CHANGELOG.md CHANGED
@@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
5
5
 
6
6
  - Nothing
7
7
 
8
+ ## 0.0.7 - 2015-03-09
9
+
10
+ - `#clear` method clears a cache's data and stats
11
+ - Bugfix for `#stats`: 0 hits and 0 misses is `0%`, not `NaN`
12
+
8
13
  ## 0.0.6 - 2015-03-09
9
14
 
10
15
  - Stats include a percentage
@@ -13,7 +18,7 @@ All notable changes to this project will be documented in this file.
13
18
 
14
19
  ### Added
15
20
 
16
- - `Caches::TTL` and `Caches::LRU` support `#stats`, which gives counts of how many cache hits and misses have occurred
21
+ - `#stats` method gives counts of how many cache hits and misses have occurred
17
22
 
18
23
  ## 0.0.4 - 2015-03-03
19
24
 
data/README.md CHANGED
@@ -63,9 +63,10 @@ puts h[:a] # => nil
63
63
 
64
64
  ## Methods Common to All Caches
65
65
 
66
- - `stats` tells how many cache hits and misses have occurred
67
- - `fetch` works like `Hash#fetch`
68
- - `memoize` returns the key's value, if any; if not, it gets its return value from the block, and sets the key before it returns
66
+ - `#fetch` works like `Hash#fetch`
67
+ - `#memoize` returns the key's value, if any; if not, it gets its return value from the block, and sets the key before it returns
68
+ - `#stats` tells how many cache hits and misses have occurred
69
+ - `#clear` resets all data and stats
69
70
 
70
71
  ## Installation
71
72
 
data/lib/caches/lru.rb CHANGED
@@ -13,8 +13,7 @@ module Caches
13
13
 
14
14
  def initialize(options = {})
15
15
  self.max_keys = options.fetch(:max_keys, 20)
16
- self.data = {}
17
- self.keys = LinkedList.new
16
+ initialize_data
18
17
  end
19
18
 
20
19
  def [](key)
@@ -45,8 +44,18 @@ module Caches
45
44
  keys.length
46
45
  end
47
46
 
47
+ def clear
48
+ initialize_data
49
+ end
50
+
48
51
  private
49
52
 
53
+ def initialize_data
54
+ self.data = {}
55
+ self.keys = LinkedList.new
56
+ self
57
+ end
58
+
50
59
  def prune
51
60
  return unless keys.length > max_keys
52
61
  expiring_node = keys.pop
data/lib/caches/stats.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Caches
2
2
  module Stats
3
3
 
4
- def initialize(*args)
4
+ def initialize_data
5
5
  @hits = 0
6
6
  @misses = 0
7
7
  super
@@ -22,8 +22,9 @@ module Caches
22
22
  end
23
23
 
24
24
  def hit_rate
25
- rate = (Float(@hits) / (Float(@hits) + Float(@misses)))
26
- "#{rate * 100}%"
25
+ attempts = Float(@hits) + Float(@misses)
26
+ ratio = attempts.zero? ? 0.0 : Float(@hits) / attempts
27
+ "#{ratio * 100}%"
27
28
  end
28
29
 
29
30
  end
data/lib/caches/ttl.rb CHANGED
@@ -15,9 +15,8 @@ module Caches
15
15
  def initialize(options = {})
16
16
  self.ttl = options.fetch(:ttl) { 3600 }
17
17
  self.refresh = !!(options.fetch(:refresh, false))
18
- self.data = {}
19
- self.nodes = LinkedList.new
20
18
  self.max_keys = options[:max_keys]
19
+ initialize_data
21
20
  end
22
21
 
23
22
  def [](key)
@@ -70,8 +69,18 @@ module Caches
70
69
  data.values.map { |h| h.fetch(:value) }
71
70
  end
72
71
 
72
+ def clear
73
+ initialize_data
74
+ end
75
+
73
76
  private
74
77
 
78
+ def initialize_data
79
+ self.data = {}
80
+ self.nodes = LinkedList.new
81
+ self
82
+ end
83
+
75
84
  def current?(key)
76
85
  (current_time - data[key][:time]) < ttl
77
86
  end
@@ -1,3 +1,3 @@
1
1
  module Caches
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -134,5 +134,27 @@ describe Caches::LRU do
134
134
 
135
135
  end
136
136
 
137
+ describe "clear" do
138
+
139
+ it "clears all cached data" do
140
+ cache.clear
141
+ expect(cache.size).to eq(0)
142
+ end
143
+
144
+ it "clears the stats" do
145
+ cache[:a]
146
+ cache[:nope]
147
+ cache.clear
148
+ expect(cache.stats).to eq(hits: 0, misses: 0, hit_rate: "0.0%")
149
+ end
150
+
151
+ it "returns the empty cache" do
152
+ id = cache.object_id
153
+ returned = cache.clear
154
+ expect(returned.object_id).to eq(id)
155
+ end
156
+
157
+ end
158
+
137
159
  end
138
160
 
@@ -233,4 +233,26 @@ describe Caches::TTL do
233
233
 
234
234
  end
235
235
 
236
+ describe "clear" do
237
+
238
+ it "clears all cached data" do
239
+ cache.clear
240
+ expect(cache.size).to eq(0)
241
+ end
242
+
243
+ it "clears the stats" do
244
+ cache[:a]
245
+ cache[:nope]
246
+ cache.clear
247
+ expect(cache.stats).to eq(hits: 0, misses: 0, hit_rate: "0.0%")
248
+ end
249
+
250
+ it "returns the empty cache" do
251
+ id = cache.object_id
252
+ returned = cache.clear
253
+ expect(returned.object_id).to eq(id)
254
+ end
255
+
256
+ end
257
+
236
258
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caches
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Long