ngmoco-cache-money 0.2.23 → 0.2.24.2

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.
@@ -36,6 +36,17 @@ module Cash
36
36
  mock(Story.connection).execute.never
37
37
  story.characters.count(:all, :conditions => { :name => name }).should == characters.size
38
38
  end
39
+
40
+ it 'has correct counter cache' do
41
+ story = Story.create!
42
+ characters = [story.characters.create!(:name => name = 'name'), story.characters.create!(:name => name)]
43
+ $memcache.flush_all
44
+ story.characters.find(:all, :conditions => { :name => name }) == characters
45
+ story.characters.count(:all, :conditions => { :name => name }).should == characters.size
46
+ story.characters.find(:all, :conditions => { :name => name }) == characters
47
+ mock(Story.connection).execute.never
48
+ # story.characters.count(:all, :conditions => { :name => name }).should == characters.size
49
+ end
39
50
  end
40
51
  end
41
52
  end
@@ -369,6 +369,7 @@ module Cash
369
369
  @short2 = Short.create(:title => 'another title',
370
370
  :subtitle => 'subtitle')
371
371
  $memcache.flush_all
372
+ # debugger
372
373
  Short.find(:all, :conditions => { :subtitle => @short1.subtitle },
373
374
  :order => 'title')
374
375
  end
@@ -387,10 +388,9 @@ module Cash
387
388
  :order => 'title').map(&:id).should == [@short2.id, @short1.id]
388
389
  end
389
390
 
390
- # it 'pulls multiple objects from the cache, not the database' do
391
- # mock(Story.connection).execute.never
392
- # Short.find(:all, :conditions => { :subtitle => @short1.subtitle },
393
- # :order => 'title').should_not be_empty
391
+ # it 'populates cache for each object' do
392
+ # Short.fetch("id/#{@short1.id}").should == [@short1]
393
+ # Short.fetch("id/#{@short2.id}").should == [@short2]
394
394
  # end
395
395
  end
396
396
 
@@ -2,10 +2,12 @@ require "spec_helper"
2
2
 
3
3
  module Cash
4
4
  describe Lock do
5
+ let(:lock) { Cash::Lock.new($memcache) }
6
+
5
7
  describe '#synchronize' do
6
8
  it "yields the block" do
7
9
  block_was_called = false
8
- $lock.synchronize('lock_key') do
10
+ lock.synchronize('lock_key') do
9
11
  block_was_called = true
10
12
  end
11
13
  block_was_called.should == true
@@ -13,26 +15,26 @@ module Cash
13
15
 
14
16
  it "acquires the specified lock before the block is run" do
15
17
  $memcache.get("lock/lock_key").should == nil
16
- $lock.synchronize('lock_key') do
18
+ lock.synchronize('lock_key') do
17
19
  $memcache.get("lock/lock_key").should_not == nil
18
20
  end
19
21
  end
20
22
 
21
23
  it "releases the lock after the block is run" do
22
24
  $memcache.get("lock/lock_key").should == nil
23
- $lock.synchronize('lock_key') {}
25
+ lock.synchronize('lock_key') {}
24
26
  $memcache.get("lock/lock_key").should == nil
25
27
  end
26
28
 
27
29
  it "releases the lock even if the block raises" do
28
30
  $memcache.get("lock/lock_key").should == nil
29
- $lock.synchronize('lock_key') { raise } rescue nil
31
+ lock.synchronize('lock_key') { raise } rescue nil
30
32
  $memcache.get("lock/lock_key").should == nil
31
33
  end
32
34
 
33
35
  it "does not block on recursive lock acquisition" do
34
- $lock.synchronize('lock_key') do
35
- lambda { $lock.synchronize('lock_key') {} }.should_not raise_error
36
+ lock.synchronize('lock_key') do
37
+ lambda { lock.synchronize('lock_key') {} }.should_not raise_error
36
38
  end
37
39
  end
38
40
  end
@@ -40,47 +42,51 @@ module Cash
40
42
  describe '#acquire_lock' do
41
43
  it "creates a lock at a given cache key" do
42
44
  $memcache.get("lock/lock_key").should == nil
43
- $lock.acquire_lock("lock_key")
45
+ lock.acquire_lock("lock_key")
44
46
  $memcache.get("lock/lock_key").should_not == nil
45
47
  end
46
48
 
47
49
  describe 'when given a timeout for the lock' do
48
50
  it "correctly sets timeout on memcache entries" do
49
51
  mock($memcache).add('lock/lock_key', "#{Socket.gethostname} #{Process.pid}", timeout = 10) { true }
50
- # $lock.acquire_lock('lock_key', timeout)
51
- lambda { $lock.acquire_lock('lock_key', timeout, 1) }.should raise_error
52
+ # lock.acquire_lock('lock_key', timeout)
53
+ lambda { lock.acquire_lock('lock_key', timeout, 1) }.should raise_error(Cash::Lock::Error)
52
54
  end
53
55
  end
54
56
 
55
- describe 'when to processes contend for a lock' do
57
+ describe 'when two processes contend for a lock' do
56
58
  it "prevents two processes from acquiring the same lock at the same time" do
57
- $lock.acquire_lock('lock_key')
59
+ lock.acquire_lock('lock_key')
58
60
  as_another_process do
59
- stub($lock).exponential_sleep
60
- lambda { $lock.acquire_lock('lock_key') }.should raise_error
61
+ stub(lock).exponential_sleep
62
+ lambda { lock.acquire_lock('lock_key') }.should raise_error(Cash::Lock::Error)
61
63
  end
62
64
  end
63
65
 
64
66
  describe 'when given a number of times to retry' do
65
67
  it "retries specified number of times" do
66
- $lock.acquire_lock('lock_key')
68
+ lock.acquire_lock('lock_key')
67
69
  as_another_process do
68
70
  mock($memcache).add("lock/lock_key", "#{Socket.gethostname} #{Process.pid}", timeout = 10) { false }.times(retries = 3)
69
- stub($lock).exponential_sleep
70
- lambda { $lock.acquire_lock('lock_key', timeout, retries) }.should raise_error
71
+ stub(lock).exponential_sleep
72
+ lambda { lock.acquire_lock('lock_key', timeout, retries) }.should raise_error(Cash::Lock::Error)
71
73
  end
72
74
  end
73
75
  end
74
76
 
75
77
  describe 'when given an initial wait' do
76
78
  it 'sleeps exponentially starting with the initial wait' do
77
- stub($lock).sleep(initial_wait = 0.123)
78
- stub($lock).sleep(2 * initial_wait)
79
- stub($lock).sleep(4 * initial_wait)
80
- stub($lock).sleep(8 * initial_wait)
81
- $lock.acquire_lock('lock_key')
79
+ stub(lock).sleep(initial_wait = 0.123)
80
+ stub(lock).sleep(2 * initial_wait)
81
+ stub(lock).sleep(4 * initial_wait)
82
+ stub(lock).sleep(8 * initial_wait)
83
+ stub(lock).sleep(16 * initial_wait)
84
+ stub(lock).sleep(32 * initial_wait)
85
+ stub(lock).sleep(64 * initial_wait)
86
+ stub(lock).sleep(128 * initial_wait)
87
+ lock.acquire_lock('lock_key')
82
88
  as_another_process do
83
- lambda { $lock.acquire_lock('lock_key', Lock::DEFAULT_EXPIRY, Lock::DEFAULT_RETRY, initial_wait) }.should raise_error
89
+ lambda { lock.acquire_lock('lock_key', Lock::DEFAULT_EXPIRY, Lock::DEFAULT_RETRY, initial_wait) }.should raise_error(Cash::Lock::Error)
84
90
  end
85
91
  end
86
92
  end
@@ -98,9 +104,9 @@ module Cash
98
104
  describe '#release_lock' do
99
105
  it "deletes the lock for a given cache key" do
100
106
  $memcache.get("lock/lock_key").should == nil
101
- $lock.acquire_lock("lock_key")
107
+ lock.acquire_lock("lock_key")
102
108
  $memcache.get("lock/lock_key").should_not == nil
103
- $lock.release_lock("lock_key")
109
+ lock.release_lock("lock_key")
104
110
  $memcache.get("lock/lock_key").should == nil
105
111
  end
106
112
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe Marshal do
4
4
  describe '#load' do
@@ -2,8 +2,10 @@ require "spec_helper"
2
2
 
3
3
  module Cash
4
4
  describe Transactional do
5
+ let(:lock) { Cash::Lock.new($memcache) }
6
+
5
7
  before do
6
- @cache = Transactional.new($memcache, $lock)
8
+ @cache = Transactional.new($memcache, lock)
7
9
  @value = "stuff to be cached"
8
10
  @key = "key"
9
11
  end
@@ -230,9 +232,9 @@ module Cash
230
232
 
231
233
  describe 'Lock Acquisition' do
232
234
  it "locks @keys to be written before writing to memcache and release them after" do
233
- mock($lock).acquire_lock(@key)
235
+ mock(lock).acquire_lock(@key)
234
236
  mock($memcache).set(@key, @value)
235
- mock($lock).release_lock(@key)
237
+ mock(lock).release_lock(@key)
236
238
 
237
239
  @cache.transaction do
238
240
  @cache.set(@key, @value)
@@ -240,8 +242,8 @@ module Cash
240
242
  end
241
243
 
242
244
  it "does not acquire locks on reads" do
243
- mock($lock).acquire_lock.never
244
- mock($lock).release_lock.never
245
+ mock(lock).acquire_lock.never
246
+ mock(lock).release_lock.never
245
247
 
246
248
  @cache.transaction do
247
249
  @cache.get(@key)
@@ -250,11 +252,11 @@ module Cash
250
252
 
251
253
  it "locks @keys in lexically sorted order" do
252
254
  keys = ['c', 'a', 'b']
253
- keys.sort.inject(mock($lock)) do |mock, key|
255
+ keys.sort.inject(mock(lock)) do |mock, key|
254
256
  mock.acquire_lock(key).then
255
257
  end
256
258
  keys.each { |key| mock($memcache).set(key, @value) }
257
- keys.each { |key| mock($lock).release_lock(key) }
259
+ keys.each { |key| mock(lock).release_lock(key) }
258
260
  @cache.transaction do
259
261
  @cache.set(keys[0], @value)
260
262
  @cache.set(keys[1], @value)
@@ -263,8 +265,8 @@ module Cash
263
265
  end
264
266
 
265
267
  it "releases locks even if memcache blows up" do
266
- mock($lock).acquire_lock.with(@key)
267
- mock($lock).release_lock.with(@key)
268
+ mock(lock).acquire_lock.with(@key)
269
+ mock(lock).release_lock.with(@key)
268
270
  stub($memcache).set(anything, anything) { raise }
269
271
  @cache.transaction do
270
272
  @cache.set(@key, @value)
@@ -414,8 +416,8 @@ module Cash
414
416
  end
415
417
 
416
418
  it "does not acquire locks if transaction is rolled back" do
417
- mock($lock).acquire_lock.never
418
- mock($lock).release_lock.never
419
+ mock(lock).acquire_lock.never
420
+ mock(lock).release_lock.never
419
421
 
420
422
  @cache.transaction do
421
423
  @cache.set(@key, value)
@@ -474,11 +476,11 @@ module Cash
474
476
 
475
477
  it "acquire locks in lexical order for all keys" do
476
478
  keys = ['c', 'a', 'b']
477
- keys.sort.inject(mock($lock)) do |mock, key|
479
+ keys.sort.inject(mock(lock)) do |mock, key|
478
480
  mock.acquire_lock(key).then
479
481
  end
480
482
  keys.each { |key| mock($memcache).set(key, @value) }
481
- keys.each { |key| mock($lock).release_lock(key) }
483
+ keys.each { |key| mock(lock).release_lock(key) }
482
484
  @cache.transaction do
483
485
  @cache.set(keys[0], @value)
484
486
  @cache.transaction do
@@ -504,8 +506,8 @@ module Cash
504
506
 
505
507
  describe 'Error Handling' do
506
508
  it "releases locks even if memcache blows up" do
507
- mock($lock).acquire_lock(@key)
508
- mock($lock).release_lock(@key)
509
+ mock(lock).acquire_lock(@key)
510
+ mock(lock).release_lock(@key)
509
511
  stub($memcache).set(anything, anything) { raise }
510
512
  @cache.transaction do
511
513
  @cache.transaction do
@@ -543,8 +545,8 @@ module Cash
543
545
  end
544
546
 
545
547
  it "not acquire locks if transaction is rolled back" do
546
- mock($lock).acquire_lock.never
547
- mock($lock).release_lock.never
548
+ mock(lock).acquire_lock.never
549
+ mock(lock).release_lock.never
548
550
 
549
551
  @cache.transaction do
550
552
  @cache.transaction do
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cash do
4
+ describe 'when disabled' do
5
+ before(:each) do
6
+ Cash.enabled = false
7
+
8
+ mock($memcache).get.never
9
+ mock($memcache).add.never
10
+ mock($memcache).set.never
11
+ end
12
+
13
+ after(:each) do
14
+ Cash.enabled = true
15
+ end
16
+
17
+ it 'creates and looks up objects without using cache' do
18
+ story = Story.create!
19
+ Story.find(story.id).should == story
20
+ end
21
+
22
+ it 'updates objects without using cache' do
23
+ story = Story.create!
24
+ story.title = 'test'
25
+ story.save!
26
+ end
27
+
28
+ it 'should find using indexed condition without using cache' do
29
+ Story.find(:all, :conditions => {:title => 'x'})
30
+ end
31
+ end
32
+ end
@@ -64,6 +64,13 @@ module Cash
64
64
  Story.get("title/").should == nil
65
65
  end
66
66
  end
67
+
68
+ it 'should not remember instance variables' do
69
+ story = Story.new(:title => 'story')
70
+ story.instance_eval { @forgetme = "value" }
71
+ story.save!
72
+ Story.find(story.id).instance_variables.should_not include("@forgetme")
73
+ end
67
74
  end
68
75
 
69
76
  describe 'after update' do
@@ -1,13 +1,13 @@
1
1
  dir = File.dirname(__FILE__)
2
2
  $LOAD_PATH.unshift "#{dir}/../lib"
3
3
 
4
+ require 'rubygems'
5
+ require 'bundler'
6
+
4
7
  require File.join(dir, '../config/environment')
5
8
  require 'spec'
6
9
  require 'pp'
7
10
  require 'cache_money'
8
- #require 'memcache'
9
- require 'memcached'
10
- require 'memcached_wrapper'
11
11
 
12
12
  Spec::Runner.configure do |config|
13
13
  config.mock_with :rr
@@ -15,8 +15,32 @@ Spec::Runner.configure do |config|
15
15
  load File.join(dir, "../db/schema.rb")
16
16
 
17
17
  config = YAML.load(IO.read((File.expand_path(File.dirname(__FILE__) + "/../config/memcached.yml"))))['test']
18
- $memcache = MemcachedWrapper.new(config["servers"].gsub(' ', '').split(','), config)
19
- $lock = Cash::Lock.new($memcache)
18
+
19
+ case ENV['ADAPTER']
20
+ when 'memcache_client'
21
+ # Test with MemCache client
22
+ require 'cash/adapter/memcache_client'
23
+ $memcache = Cash::Adapter::MemcacheClient.new(MemCache.new(config['servers']),
24
+ :default_ttl => 1.minute.to_i)
25
+
26
+ when 'redis'
27
+ # Test with Redis client
28
+ require 'cash/adapter/redis'
29
+ require 'fakeredis'
30
+ $memcache = Cash::Adapter::Redis.new(FakeRedis::Redis.new(),
31
+ :default_ttl => 1.minute.to_i)
32
+ when 'mock'
33
+ # Test with Mock client
34
+ require 'cash/adapter/memcache_client'
35
+ require 'cash/mock'
36
+ $memcache = Cash::Adapter::MemcacheClient.new(Cash::Mock.new(),
37
+ :default_ttl => 1.minute.to_i)
38
+ else
39
+ require 'cash/adapter/memcached'
40
+ # Test with memcached client
41
+ $memcache = Cash::Adapter::Memcached.new(Memcached.new(config["servers"], config),
42
+ :default_ttl => 1.minute.to_i)
43
+ end
20
44
  end
21
45
 
22
46
  config.before :each do
@@ -26,8 +50,10 @@ Spec::Runner.configure do |config|
26
50
  end
27
51
 
28
52
  config.before :suite do
53
+ Cash.configure :repository => $memcache, :adapter => false
54
+
29
55
  ActiveRecord::Base.class_eval do
30
- is_cached :repository => Cash::Transactional.new($memcache, $lock)
56
+ is_cached
31
57
  end
32
58
 
33
59
  Character = Class.new(ActiveRecord::Base)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ngmoco-cache-money
3
3
  version: !ruby/object:Gem::Version
4
- hash: 57
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 2
9
- - 23
10
- version: 0.2.23
8
+ - 24
9
+ - 2
10
+ version: 0.2.24.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nick Kallen
@@ -18,41 +18,149 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2010-11-23 00:00:00 -08:00
21
+ date: 2012-05-07 00:00:00 -07:00
22
22
  default_executable:
23
23
  dependencies:
24
24
  - !ruby/object:Gem::Dependency
25
- requirement: &id001 !ruby/object:Gem::Requirement
26
- none: false
25
+ type: :runtime
26
+ version_requirements: &id001 !ruby/object:Gem::Requirement
27
27
  requirements:
28
28
  - - ">="
29
29
  - !ruby/object:Gem::Version
30
- hash: 7
31
30
  segments:
32
31
  - 2
33
32
  - 2
34
33
  - 0
35
34
  version: 2.2.0
36
- type: :runtime
35
+ - - <
36
+ - !ruby/object:Gem::Version
37
+ segments:
38
+ - 3
39
+ - 0
40
+ version: "3.0"
41
+ requirement: *id001
37
42
  name: activerecord
38
43
  prerelease: false
39
- version_requirements: *id001
40
44
  - !ruby/object:Gem::Dependency
41
- requirement: &id002 !ruby/object:Gem::Requirement
42
- none: false
45
+ type: :runtime
46
+ version_requirements: &id002 !ruby/object:Gem::Requirement
43
47
  requirements:
44
48
  - - ">="
45
49
  - !ruby/object:Gem::Version
46
- hash: 7
47
50
  segments:
48
51
  - 2
49
52
  - 2
50
53
  - 0
51
54
  version: 2.2.0
52
- type: :runtime
55
+ - - <
56
+ - !ruby/object:Gem::Version
57
+ segments:
58
+ - 3
59
+ - 0
60
+ version: "3.0"
61
+ requirement: *id002
53
62
  name: activesupport
54
63
  prerelease: false
55
- version_requirements: *id002
64
+ - !ruby/object:Gem::Dependency
65
+ type: :development
66
+ version_requirements: &id003 !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ requirement: *id003
74
+ name: rake
75
+ prerelease: false
76
+ - !ruby/object:Gem::Dependency
77
+ type: :development
78
+ version_requirements: &id004 !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ segments:
83
+ - 0
84
+ - 10
85
+ - 0
86
+ version: 0.10.0
87
+ requirement: *id004
88
+ name: ruby-debug
89
+ prerelease: false
90
+ - !ruby/object:Gem::Dependency
91
+ type: :development
92
+ version_requirements: &id005 !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ segments:
97
+ - 1
98
+ - 3
99
+ - 0
100
+ version: 1.3.0
101
+ requirement: *id005
102
+ name: rspec
103
+ prerelease: false
104
+ - !ruby/object:Gem::Dependency
105
+ type: :development
106
+ version_requirements: &id006 !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ segments:
111
+ - 0
112
+ version: "0"
113
+ requirement: *id006
114
+ name: sqlite3-ruby
115
+ prerelease: false
116
+ - !ruby/object:Gem::Dependency
117
+ type: :development
118
+ version_requirements: &id007 !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ segments:
123
+ - 0
124
+ version: "0"
125
+ requirement: *id007
126
+ name: rr
127
+ prerelease: false
128
+ - !ruby/object:Gem::Dependency
129
+ type: :development
130
+ version_requirements: &id008 !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ segments:
135
+ - 0
136
+ version: "0"
137
+ requirement: *id008
138
+ name: memcached
139
+ prerelease: false
140
+ - !ruby/object:Gem::Dependency
141
+ type: :development
142
+ version_requirements: &id009 !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ segments:
147
+ - 0
148
+ version: "0"
149
+ requirement: *id009
150
+ name: memcache-client
151
+ prerelease: false
152
+ - !ruby/object:Gem::Dependency
153
+ type: :development
154
+ version_requirements: &id010 !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ segments:
159
+ - 0
160
+ version: "0"
161
+ requirement: *id010
162
+ name: fakeredis
163
+ prerelease: false
56
164
  description: Write-through and Read-through Cacheing for ActiveRecord
57
165
  email: teamplatform@ngmoco.com
58
166
  executables: []
@@ -68,9 +176,11 @@ files:
68
176
  - README
69
177
  - TODO
70
178
  - UNSUPPORTED_FEATURES
71
- - init.rb
72
179
  - lib/cache_money.rb
73
180
  - lib/cash/accessor.rb
181
+ - lib/cash/adapter/memcache_client.rb
182
+ - lib/cash/adapter/memcached.rb
183
+ - lib/cash/adapter/redis.rb
74
184
  - lib/cash/buffered.rb
75
185
  - lib/cash/config.rb
76
186
  - lib/cash/fake.rb
@@ -87,62 +197,43 @@ files:
87
197
  - lib/cash/transactional.rb
88
198
  - lib/cash/util/array.rb
89
199
  - lib/cash/util/marshal.rb
200
+ - lib/cash/version.rb
90
201
  - lib/cash/write_through.rb
91
202
  - lib/mem_cached_session_store.rb
92
203
  - lib/mem_cached_support_store.rb
93
- - lib/memcached_wrapper.rb
94
204
  - rails/init.rb
205
+ - init.rb
95
206
  - LICENSE
96
207
  - README.markdown
97
- - config/environment.rb
98
- - config/memcached.yml
99
- - db/schema.rb
100
- - spec/cash/accessor_spec.rb
101
- - spec/cash/active_record_spec.rb
102
- - spec/cash/buffered_spec.rb
103
- - spec/cash/calculations_spec.rb
104
- - spec/cash/finders_spec.rb
105
- - spec/cash/local_buffer_spec.rb
106
- - spec/cash/local_spec.rb
107
- - spec/cash/lock_spec.rb
108
- - spec/cash/marshal_spec.rb
109
- - spec/cash/order_spec.rb
110
- - spec/cash/transactional_spec.rb
111
- - spec/cash/window_spec.rb
112
- - spec/cash/write_through_spec.rb
113
- - spec/memcached_wrapper_test.rb
114
- - spec/spec_helper.rb
115
208
  has_rdoc: true
116
209
  homepage: http://github.com/ngmoco/cache-money
117
210
  licenses: []
118
211
 
119
212
  post_install_message:
120
- rdoc_options:
121
- - --charset=UTF-8
213
+ rdoc_options: []
214
+
122
215
  require_paths:
123
216
  - lib
124
217
  required_ruby_version: !ruby/object:Gem::Requirement
125
- none: false
126
218
  requirements:
127
219
  - - ">="
128
220
  - !ruby/object:Gem::Version
129
- hash: 3
130
221
  segments:
131
222
  - 0
132
223
  version: "0"
133
224
  required_rubygems_version: !ruby/object:Gem::Requirement
134
- none: false
135
225
  requirements:
136
- - - ">="
226
+ - - "="
137
227
  - !ruby/object:Gem::Version
138
- hash: 3
139
228
  segments:
140
- - 0
141
- version: "0"
229
+ - 1
230
+ - 3
231
+ - 7
232
+ version: 1.3.7
142
233
  requirements: []
143
234
 
144
235
  rubyforge_project:
145
- rubygems_version: 1.3.7
236
+ rubygems_version: 1.3.6
146
237
  signing_key:
147
238
  specification_version: 3
148
239
  summary: Write-through and Read-through Cacheing for ActiveRecord
@@ -162,6 +253,6 @@ test_files:
162
253
  - spec/cash/order_spec.rb
163
254
  - spec/cash/transactional_spec.rb
164
255
  - spec/cash/window_spec.rb
256
+ - spec/cash/without_caching_spec.rb
165
257
  - spec/cash/write_through_spec.rb
166
- - spec/memcached_wrapper_test.rb
167
258
  - spec/spec_helper.rb