diff --git a/lib/fast_cache/cache.rb b/lib/fast_cache/cache.rb index f8153b7..f90b7c2 100644 --- a/lib/fast_cache/cache.rb +++ b/lib/fast_cache/cache.rb @@ -201,8 +201,8 @@ def store_entry(key, entry) end def shrink_if_needed - if @data.length > @max_size - entry = delete(@data.shift) + while @data.length > @max_size + entry = @data.shift.last @expires_at.delete(entry) end end diff --git a/spec/lib/fast_cache/cache_spec.rb b/spec/lib/fast_cache/cache_spec.rb index a96db3f..df8fa7f 100644 --- a/spec/lib/fast_cache/cache_spec.rb +++ b/spec/lib/fast_cache/cache_spec.rb @@ -41,6 +41,14 @@ subject[:a].should eq 10 end + describe '#shrink_if_needed' do + it 'deletes the entry correctly' do + subject[:d] = 4 + subject.instance_variable_get('@data').keys.should =~ [ :b, :c, :d ] + subject.instance_variable_get('@expires_at').values.should =~ [ :b, :c, :d ] + end + end + describe '#fetch' do it 'fetches from the cache when a key is present' do subject.fetch(:a) do