ruby-quilt 0.1.4 → 0.1.5

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.
Files changed (2) hide show
  1. data/lib/lru_cache.rb +42 -0
  2. metadata +2 -1
data/lib/lru_cache.rb ADDED
@@ -0,0 +1,42 @@
1
+ class LRUCache
2
+ def initialize(size = 10)
3
+ @size = size
4
+ @store = {}
5
+ @lru = []
6
+ end
7
+
8
+ def set(key, value = nil)
9
+ @store[key] = value
10
+ set_lru(key)
11
+ @store.delete(@lru.pop) if @lru.size > @size
12
+ value
13
+ end
14
+
15
+ def get(key)
16
+ return nil unless @store.key?(key)
17
+ set_lru(key)
18
+ @store[key]
19
+ end
20
+
21
+ def [](key)
22
+ get(key)
23
+ end
24
+
25
+ def []=(key, value)
26
+ set(key, value)
27
+ end
28
+
29
+ def keys
30
+ @store.keys
31
+ end
32
+
33
+ def delete(key)
34
+ @store.delete(key)
35
+ @lru.delete(key)
36
+ end
37
+
38
+ private
39
+ def set_lru(key)
40
+ @lru.unshift(@lru.delete(key) || key)
41
+ end
42
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-quilt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -151,6 +151,7 @@ extensions: []
151
151
  extra_rdoc_files: []
152
152
  files:
153
153
  - lib/quilt.rb
154
+ - lib/lru_cache.rb
154
155
  homepage: http://github.com/ooyala/ruby-quilt
155
156
  licenses:
156
157
  - MIT