lru_redux 0.8.4 → 1.1.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.
@@ -0,0 +1,17 @@
1
+ module LruRedux
2
+ module Util
3
+ module SafeSync
4
+ def getset(key, &block)
5
+ synchronize do
6
+ super(key, &block)
7
+ end
8
+ end
9
+
10
+ def fetch(key, &block)
11
+ synchronize do
12
+ super(key, &block)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module LruRedux
2
- VERSION = "0.8.4"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -6,13 +6,15 @@ require 'lru_redux/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "lru_redux"
8
8
  spec.version = LruRedux::VERSION
9
- spec.authors = ["Sam Saffron"]
10
- spec.email = ["sam.saffron@gmail.com"]
9
+ spec.authors = ["Sam Saffron", "Kaijah Hougham"]
10
+ spec.email = ["sam.saffron@gmail.com", "github@seberius.com"]
11
11
  spec.description = %q{An efficient implementation of an lru cache}
12
12
  spec.summary = %q{An efficient implementation of an lru cache}
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/SamSaffron/lru_redux"
14
14
  spec.license = "MIT"
15
15
 
16
+ spec.required_ruby_version = ">= 1.9.3"
17
+
16
18
  spec.files = `git ls-files`.split($/)
17
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
20
  spec.test_files = spec.files.grep(%r{^(test)/})
@@ -24,4 +26,5 @@ Gem::Specification.new do |spec|
24
26
  spec.add_development_dependency "guard-minitest"
25
27
  spec.add_development_dependency "guard"
26
28
  spec.add_development_dependency "rb-inotify"
29
+ spec.add_development_dependency "timecop", "~> 0.7"
27
30
  end
@@ -2,13 +2,13 @@ require 'lru_redux'
2
2
  require 'minitest/autorun'
3
3
  require 'minitest/pride'
4
4
 
5
- class CacheTest < MiniTest::Unit::TestCase
5
+ class CacheTest < MiniTest::Test
6
6
  def setup
7
7
  @c = LruRedux::Cache.new(3)
8
8
  end
9
9
 
10
10
  def teardown
11
- assert_equal true, @c.valid?
11
+ assert_equal true, @c.send(:valid?)
12
12
  end
13
13
 
14
14
  def test_drops_old
@@ -72,6 +72,14 @@ class CacheTest < MiniTest::Unit::TestCase
72
72
  assert_nil @c[:b]
73
73
  end
74
74
 
75
+ def test_key?
76
+ @c[:a] = 1
77
+ @c[:b] = 2
78
+
79
+ assert_equal true, @c.key?(:a)
80
+ assert_equal false, @c.key?(:c)
81
+ end
82
+
75
83
  def test_update
76
84
  @c[:a] = 1
77
85
  @c[:b] = 2
@@ -1,5 +1,3 @@
1
- require 'cache_test'
2
-
3
1
  class ThreadSafeCacheTest < CacheTest
4
2
  def setup
5
3
  @c = LruRedux::ThreadSafeCache.new(3)
@@ -10,7 +8,7 @@ class ThreadSafeCacheTest < CacheTest
10
8
  @c[:b] = 2
11
9
 
12
10
  # should not blow up
13
- @c.each do |k,v|
11
+ @c.each do |k, _|
14
12
  @c[k]
15
13
  end
16
14
  end
@@ -0,0 +1,91 @@
1
+ require 'timecop'
2
+
3
+ class TTLCacheTest < CacheTest
4
+ def setup
5
+ Timecop.freeze(Time.now)
6
+ @c = LruRedux::TTL::Cache.new 3, 5 * 60
7
+ end
8
+
9
+ def teardown
10
+ Timecop.return
11
+ assert_equal true, @c.send(:valid?)
12
+ end
13
+
14
+ def test_ttl
15
+ assert_equal 300, @c.ttl
16
+
17
+ @c.ttl = 10 * 60
18
+
19
+ assert_equal 600, @c.ttl
20
+ end
21
+
22
+ # TTL tests using Timecop
23
+ def test_ttl_eviction_on_access
24
+ @c[:a] = 1
25
+ @c[:b] = 2
26
+
27
+ Timecop.freeze(Time.now + 330)
28
+
29
+ @c[:c] = 3
30
+
31
+ assert_equal([[:c, 3]], @c.to_a)
32
+ end
33
+
34
+ def test_ttl_eviction_on_expire
35
+ @c[:a] = 1
36
+ @c[:b] = 2
37
+
38
+ Timecop.freeze(Time.now + 330)
39
+
40
+ @c.expire
41
+
42
+ assert_equal([], @c.to_a)
43
+ end
44
+
45
+ def test_ttl_eviction_on_new_max_size
46
+ @c[:a] = 1
47
+ @c[:b] = 2
48
+
49
+ Timecop.freeze(Time.now + 330)
50
+
51
+ @c.max_size = 10
52
+
53
+ assert_equal([], @c.to_a)
54
+ end
55
+
56
+ def test_ttl_eviction_on_new_ttl
57
+ @c[:a] = 1
58
+ @c[:b] = 2
59
+
60
+ Timecop.freeze(Time.now + 330)
61
+
62
+ @c.ttl = 10 * 60
63
+
64
+ assert_equal([[:b, 2], [:a, 1]], @c.to_a)
65
+
66
+ @c.ttl = 2 * 60
67
+
68
+ assert_equal([], @c.to_a)
69
+ end
70
+
71
+ def test_ttl_precedence_over_lru
72
+ @c[:a] = 1
73
+
74
+ Timecop.freeze(Time.now + 60)
75
+
76
+ @c[:b] = 2
77
+ @c[:c] = 3
78
+
79
+ @c[:a]
80
+
81
+ assert_equal [[:a, 1], [:c, 3], [:b, 2]],
82
+ @c.to_a
83
+
84
+ Timecop.freeze(Time.now + 270)
85
+
86
+ @c[:d] = 4
87
+
88
+ assert_equal [[:d, 4], [:c, 3], [:b, 2]],
89
+ @c.to_a
90
+ end
91
+ end
@@ -0,0 +1,16 @@
1
+ class TTLThreadSafeCacheTest < TTLCacheTest
2
+ def setup
3
+ Timecop.freeze(Time.now)
4
+ @c = LruRedux::TTL::ThreadSafeCache.new 3, 5 * 60
5
+ end
6
+
7
+ def test_recursion
8
+ @c[:a] = 1
9
+ @c[:b] = 2
10
+
11
+ # should not blow up
12
+ @c.each do |k, _|
13
+ @c[k]
14
+ end
15
+ end
16
+ end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lru_redux
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
+ - Kaijah Hougham
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2015-03-01 00:00:00.000000000 Z
12
+ date: 2015-04-07 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
@@ -94,9 +95,24 @@ dependencies:
94
95
  - - ">="
95
96
  - !ruby/object:Gem::Version
96
97
  version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: timecop
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '0.7'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '0.7'
97
112
  description: An efficient implementation of an lru cache
98
113
  email:
99
114
  - sam.saffron@gmail.com
115
+ - github@seberius.com
100
116
  executables: []
101
117
  extensions: []
102
118
  extra_rdoc_files: []
@@ -108,16 +124,24 @@ files:
108
124
  - README.md
109
125
  - Rakefile
110
126
  - bench/bench.rb
127
+ - bench/bench_ttl.rb
111
128
  - lib/lru_redux.rb
112
129
  - lib/lru_redux/cache.rb
113
- - lib/lru_redux/cache19.rb
130
+ - lib/lru_redux/cache_legacy.rb
114
131
  - lib/lru_redux/thread_safe_cache.rb
115
- - lib/lru_redux/thread_safe_cache_jruby.rb
132
+ - lib/lru_redux/ttl.rb
133
+ - lib/lru_redux/ttl/cache.rb
134
+ - lib/lru_redux/ttl/thread_safe_cache.rb
135
+ - lib/lru_redux/util.rb
136
+ - lib/lru_redux/util/safe_sync.rb
137
+ - lib/lru_redux/util/safe_sync_jruby.rb
116
138
  - lib/lru_redux/version.rb
117
139
  - lru_redux.gemspec
118
140
  - test/cache_test.rb
119
141
  - test/thread_safe_cache_test.rb
120
- homepage: ''
142
+ - test/ttl/cache_test.rb
143
+ - test/ttl/thread_safe_cache_test.rb
144
+ homepage: https://github.com/SamSaffron/lru_redux
121
145
  licenses:
122
146
  - MIT
123
147
  metadata: {}
@@ -129,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
153
  requirements:
130
154
  - - ">="
131
155
  - !ruby/object:Gem::Version
132
- version: '0'
156
+ version: 1.9.3
133
157
  required_rubygems_version: !ruby/object:Gem::Requirement
134
158
  requirements:
135
159
  - - ">="
@@ -137,10 +161,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
161
  version: '0'
138
162
  requirements: []
139
163
  rubyforge_project:
140
- rubygems_version: 2.2.2
164
+ rubygems_version: 2.4.5
141
165
  signing_key:
142
166
  specification_version: 4
143
167
  summary: An efficient implementation of an lru cache
144
168
  test_files:
145
169
  - test/cache_test.rb
146
170
  - test/thread_safe_cache_test.rb
171
+ - test/ttl/cache_test.rb
172
+ - test/ttl/thread_safe_cache_test.rb
@@ -1,13 +0,0 @@
1
- class LruRedux::ThreadSafeCache
2
- def getset(key, &block)
3
- synchronize do
4
- super(key, &block)
5
- end
6
- end
7
-
8
- def fetch(key, &block)
9
- synchronize do
10
- super(key, &block)
11
- end
12
- end
13
- end