ring_cache 1.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
+ ring_cache.sublime-*
data/lib/ring_cache.rb CHANGED
@@ -99,11 +99,14 @@ class RingCache
99
99
  end
100
100
 
101
101
  def write(key, data)
102
- evict_oldest if must_evict?
102
+ unless evict(key)
103
+ evict_oldest if must_evict?
104
+ end
103
105
  data = data.dup if @duplicate_on_store and !data.nil?
104
106
  access_time = Time.now
105
107
  @cache[key] = { last_accessed_at: access_time, data: data }
106
108
  @access_time_index << [access_time, key]
109
+ true
107
110
  end
108
111
 
109
112
  private
@@ -1,3 +1,3 @@
1
1
  class RingCache
2
- VERSION = '1.0'
2
+ VERSION = '1.0.1'
3
3
  end
@@ -127,16 +127,17 @@ class TestRingCache < Minitest::Test
127
127
  end
128
128
 
129
129
  def test_random_data
130
- cache = RingCache.new(capacity: 1_000)
130
+ cache = RingCache.new(capacity: 1_000, target_hit_rate: 0.4)
131
131
  data = random_data(2_000, 10)
132
132
 
133
- data.each do |element|
133
+ 10_000.times do
134
+ element = data.sample
134
135
  cache.fetch(element[:key]) do
135
136
  element[:content]
136
137
  end
137
138
  end
138
139
 
139
- assert_equal 1_000, cache.size
140
+ assert cache.size <= 1_000
140
141
  access_time_index = cache.instance_variable_get(:@access_time_index)
141
142
  cache_contents = cache.instance_variable_get(:@cache)
142
143
  assert_equal cache_contents.size, access_time_index.size
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path('test_helper', File.dirname(__FILE__))
4
+
5
+ class TestRingCacheIssues < Minitest::Test
6
+ def test_records_one_index_per_entry
7
+ c = RingCache.new
8
+
9
+ c.write(:a, 1)
10
+ c.write(:a, 2)
11
+
12
+ assert_equal 1, c.size
13
+ access_time_index = c.instance_variable_get(:@access_time_index)
14
+ assert_equal 1, access_time_index.size
15
+ end
16
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ring_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-18 00:00:00.000000000 Z
12
+ date: 2014-10-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -62,6 +62,7 @@ files:
62
62
  - test/random_data_generator.rb
63
63
  - test/test_helper.rb
64
64
  - test/test_ring_cache.rb
65
+ - test/test_ring_cache_issues.rb
65
66
  - test/test_ring_cache_performance.rb
66
67
  homepage: https://github.com/aredondo/ring_cache
67
68
  licenses:
@@ -92,4 +93,5 @@ test_files:
92
93
  - test/random_data_generator.rb
93
94
  - test/test_helper.rb
94
95
  - test/test_ring_cache.rb
96
+ - test/test_ring_cache_issues.rb
95
97
  - test/test_ring_cache_performance.rb