ngmoco-cache-money 0.2.10 → 0.2.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ require "spec_helper"
2
+
3
+ module Cash
4
+ describe LocalBuffer do
5
+ it "should have method missing as a private method" do
6
+ LocalBuffer.private_instance_methods.should include("method_missing")
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require "spec_helper"
2
+
3
+ module Cash
4
+ describe Local do
5
+ it "should have method missing as a private method" do
6
+ Local.private_instance_methods.should include("method_missing")
7
+ end
8
+ end
9
+ end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require "spec_helper"
2
2
 
3
3
  module Cash
4
4
  describe Lock do
@@ -22,7 +22,6 @@ module Cash
22
22
  $memcache.get("lock/lock_key").should == nil
23
23
  $lock.synchronize('lock_key') {}
24
24
  $memcache.get("lock/lock_key").should == nil
25
-
26
25
  end
27
26
 
28
27
  it "releases the lock even if the block raises" do
@@ -47,7 +46,7 @@ module Cash
47
46
 
48
47
  describe 'when given a timeout for the lock' do
49
48
  it "correctly sets timeout on memcache entries" do
50
- mock($memcache).add('lock/lock_key', Process.pid, timeout = 10) { true }
49
+ mock($memcache).add('lock/lock_key', "#{Socket.gethostname} #{Process.pid}", timeout = 10) { true }
51
50
  # $lock.acquire_lock('lock_key', timeout)
52
51
  lambda { $lock.acquire_lock('lock_key', timeout, 1) }.should raise_error
53
52
  end
@@ -66,7 +65,7 @@ module Cash
66
65
  it "retries specified number of times" do
67
66
  $lock.acquire_lock('lock_key')
68
67
  as_another_process do
69
- mock($memcache).add("lock/lock_key", Process.pid, timeout = 10) { false }.times(retries = 3)
68
+ mock($memcache).add("lock/lock_key", "#{Socket.gethostname} #{Process.pid}", timeout = 10) { false }.times(retries = 3)
70
69
  stub($lock).exponential_sleep
71
70
  lambda { $lock.acquire_lock('lock_key', timeout, retries) }.should raise_error
72
71
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require "spec_helper"
2
2
 
3
3
  module Cash
4
4
  describe 'Ordering' do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require "spec_helper"
2
2
 
3
3
  module Cash
4
4
  describe Transactional do
@@ -20,7 +20,7 @@ module Cash
20
20
  end
21
21
 
22
22
  it "increments through the real cache" do
23
- @cache.set(@key, 0)
23
+ @cache.set(@key, 0, 0, true)
24
24
  @cache.incr(@key, 3)
25
25
 
26
26
  @cache.get(@key, true).to_i.should == 3
@@ -28,7 +28,7 @@ module Cash
28
28
  end
29
29
 
30
30
  it "decrements through the real cache" do
31
- @cache.set(@key, 0)
31
+ @cache.set(@key, 0, 0, true)
32
32
  @cache.incr(@key, 3)
33
33
  @cache.decr(@key, 2)
34
34
 
@@ -130,7 +130,7 @@ module Cash
130
130
  describe 'Increment and Decrement' do
131
131
  describe '#incr' do
132
132
  it "works" do
133
- @cache.set(@key, 0)
133
+ @cache.set(@key, 0, 0, true)
134
134
  @cache.incr(@key)
135
135
  @cache.transaction do
136
136
  @cache.incr(@key).should == 2
@@ -139,7 +139,7 @@ module Cash
139
139
 
140
140
  it "is buffered" do
141
141
  @cache.transaction do
142
- @cache.set(@key, 0)
142
+ @cache.set(@key, 0, 0, true)
143
143
  @cache.incr(@key, 2).should == 2
144
144
  @cache.get(@key).should == 2
145
145
  $memcache.get(@key).should == nil
@@ -158,7 +158,7 @@ module Cash
158
158
 
159
159
  describe '#decr' do
160
160
  it "works" do
161
- @cache.set(@key, 0)
161
+ @cache.set(@key, 0, 0, true)
162
162
  @cache.incr(@key)
163
163
  @cache.transaction do
164
164
  @cache.decr(@key).should == 0
@@ -167,7 +167,7 @@ module Cash
167
167
 
168
168
  it "is buffered" do
169
169
  @cache.transaction do
170
- @cache.set(@key, 0)
170
+ @cache.set(@key, 0, 0, true)
171
171
  @cache.incr(@key, 3)
172
172
  @cache.decr(@key, 2).should == 1
173
173
  @cache.get(@key, true).to_i.should == 1
@@ -185,7 +185,7 @@ module Cash
185
185
 
186
186
  it "bottoms out at zero" do
187
187
  @cache.transaction do
188
- @cache.set(@key, 0)
188
+ @cache.set(@key, 0, 0, true)
189
189
  @cache.incr(@key, 1)
190
190
  @cache.get(@key, true).should == 1
191
191
  @cache.decr(@key)
@@ -336,7 +336,7 @@ module Cash
336
336
 
337
337
  describe '#incr' do
338
338
  it "increment be atomic" do
339
- @cache.set(@key, 0)
339
+ @cache.set(@key, 0, 0, true)
340
340
  @cache.transaction do
341
341
  @cache.incr(@key)
342
342
  $memcache.incr(@key)
@@ -346,11 +346,11 @@ module Cash
346
346
  end
347
347
 
348
348
  it "interleaved, etc. increments and sets be ordered" do
349
- @cache.set(@key, 0)
349
+ @cache.set(@key, 0, 0, true)
350
350
  @cache.transaction do
351
351
  @cache.incr(@key)
352
352
  @cache.incr(@key)
353
- @cache.set(@key, 0)
353
+ @cache.set(@key, 0, 0, true)
354
354
  @cache.incr(@key)
355
355
  @cache.incr(@key)
356
356
  end
@@ -361,7 +361,7 @@ module Cash
361
361
 
362
362
  describe '#decr' do
363
363
  it "decrement be atomic" do
364
- @cache.set(@key, 0)
364
+ @cache.set(@key, 0, 0, true)
365
365
  @cache.incr(@key, 3)
366
366
  @cache.transaction do
367
367
  @cache.decr(@key)
@@ -570,5 +570,9 @@ module Cash
570
570
  end
571
571
  end
572
572
  end
573
+
574
+ it "should have method_missing as a private method" do
575
+ Transactional.private_instance_methods.should include("method_missing")
576
+ end
573
577
  end
574
578
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require "spec_helper"
2
2
 
3
3
  module Cash
4
4
  describe 'Windows' do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require "spec_helper"
2
2
 
3
3
  module Cash
4
4
  describe WriteThrough do
@@ -0,0 +1,209 @@
1
+ require 'test_helper'
2
+ require 'memcache'
3
+
4
+ class MemcachedWrapperTest < ActiveSupport::TestCase
5
+
6
+ context "with single memcached server" do
7
+
8
+ setup do
9
+ @wrapper = MemcachedWrapper.new("127.0.0.1:11211", {:namespace => "wrapper", :show_backtraces => true, :support_cas => true})
10
+ @memcache = MemCache.new("127.0.0.1:11211", {:namespace => "memcache"})
11
+ @wrapper.flush_all
12
+ @memcache.flush_all
13
+ end
14
+
15
+ teardown do
16
+ @wrapper.close
17
+ @memcache.reset
18
+ end
19
+
20
+ should "add" do
21
+ assert_equal(@wrapper.add("blah/toe", "blah"), @memcache.add("blah/toe", "blah"))
22
+ assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
23
+ assert_equal(@wrapper.add("blah/toe", "blah2"), @memcache.add("blah/toe", "blah2"))
24
+ assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
25
+ end
26
+
27
+ should "replace" do
28
+ assert_equal(@wrapper.replace("blah/toe", "blah"), @memcache.replace("blah/toe", "blah"))
29
+ assert_equal(@wrapper.add("blah/toe", "blah"), @memcache.add("blah/toe", "blah"))
30
+ assert_equal(@wrapper.replace("blah/toe", "blah2"), @memcache.replace("blah/toe", "blah2"))
31
+ assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
32
+ end
33
+
34
+ should "get" do
35
+ assert_equal(@wrapper.add("blah/toe", "blah"), @memcache.add("blah/toe", "blah"))
36
+ assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
37
+ end
38
+
39
+ should "fetch" do
40
+ assert_equal(@wrapper.fetch("blah/toe") { "blah" }, @memcache.fetch("blah/toe") { "blah" })
41
+ assert_equal(@wrapper.fetch("blah/toe") { "blah2" }, @memcache.fetch("blah/toe") { "blah2" })
42
+ end
43
+
44
+ should "compare and swap" do
45
+ assert_equal(@wrapper.cas("blah/toe") { "blah" }, @memcache.cas("blah/toe") { "blah" })
46
+ assert_equal(@wrapper.add("blah/toe", "blah"), @memcache.add("blah/toe", "blah"))
47
+ assert_equal(@wrapper.cas("blah/toe") { "blah2" }, @memcache.cas("blah/toe") { "blah2" })
48
+ assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
49
+ end
50
+
51
+ should "get multiple" do
52
+ assert_equal(@wrapper.add("blah/toe", "blah"), @memcache.add("blah/toe", "blah"))
53
+ assert_equal(@wrapper.add("blah/finger", "blah2"), @memcache.add("blah/finger", "blah2"))
54
+ assert_equal(@wrapper.get_multi(["blah/toe", "blah/finger"]), @memcache.get_multi(["blah/toe", "blah/finger"]))
55
+ end
56
+
57
+ should "set" do
58
+ assert_equal(@wrapper.set("blah/toe", "blah"), @memcache.set("blah/toe", "blah"))
59
+ assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
60
+ end
61
+
62
+ should "append" do
63
+ assert_equal(@wrapper.append("blah/toe", "blah"), @memcache.append("blah/toe", "blah"))
64
+ assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
65
+
66
+ assert_equal(@wrapper.set("blah/toe", "blah", 0, true), @memcache.set("blah/toe", "blah", 0, true))
67
+ assert_equal(@wrapper.get("blah/toe", true), @memcache.get("blah/toe", true))
68
+ assert_equal(@wrapper.append("blah/toe", "blah2"), @memcache.append("blah/toe", "blah2"))
69
+ assert_equal(@wrapper.get("blah/toe", true), @memcache.get("blah/toe", true))
70
+ end
71
+
72
+ should "prepend" do
73
+ assert_equal(@wrapper.prepend("blah/toe", "blah"), @memcache.prepend("blah/toe", "blah"))
74
+ assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
75
+
76
+ assert_equal(@wrapper.set("blah/toe", "blah", 0, true), @memcache.set("blah/toe", "blah", 0, true))
77
+ assert_equal(@wrapper.prepend("blah/toe", "blah2"), @memcache.prepend("blah/toe", "blah2"))
78
+ assert_equal(@wrapper.get("blah/toe", true), @memcache.get("blah/toe", true))
79
+ end
80
+
81
+ should "delete" do
82
+ assert_equal(@wrapper.delete("blah/toe"), @memcache.delete("blah/toe"))
83
+ assert_equal(@wrapper.set("blah/toe", "blah"), @memcache.set("blah/toe", "blah"))
84
+ assert_equal(@wrapper.delete("blah/toe"), @memcache.delete("blah/toe"))
85
+ end
86
+
87
+ should "increment" do
88
+ assert_equal(@wrapper.incr("blah/count"), @memcache.incr("blah/count"))
89
+ assert_equal(@wrapper.set("blah/count", 0, 0, true), @memcache.set("blah/count", 0, 0, true))
90
+ assert_equal(@wrapper.incr("blah/count"), @memcache.incr("blah/count"))
91
+ end
92
+
93
+ should "decrement" do
94
+ assert_equal(@wrapper.decr("blah/count"), @memcache.decr("blah/count"))
95
+ assert_equal(@wrapper.set("blah/count", 2, 0, true), @memcache.set("blah/count", 2, 0, true))
96
+ assert_equal(@wrapper.decr("blah/count"), @memcache.decr("blah/count"))
97
+ end
98
+
99
+ # should "stats" do
100
+ # assert_equal(@wrapper.stats(), @memcache.stats())
101
+ # end
102
+
103
+ end
104
+
105
+ # context "with two memcached servers" do
106
+ #
107
+ # setup do
108
+ # @wrapper = MemcachedWrapper.new(["127.0.0.1:11211", "127.0.0.1:1111"], {:show_backtraces => true, :support_cas => true})
109
+ # # @wrapper = MemCache.new(["127.0.0.1:11211", "127.0.0.1:1111"], {:show_backtraces => true, :support_cas => true})
110
+ # @wrapper.flush_all
111
+ # end
112
+ #
113
+ # teardown do
114
+ # # @wrapper.close
115
+ # end
116
+ #
117
+ # should "add value" do
118
+ # assert_stored(@wrapper.add("blah/toe", "blah"))
119
+ # assert_equal( "blah", @wrapper.get("blah/toe"))
120
+ # assert_not_stored(@wrapper.add("blah/toe", "blah2"))
121
+ # assert_equal( "blah", @wrapper.get("blah/toe"))
122
+ # end
123
+ #
124
+ # should "get value" do
125
+ # assert_stored(@wrapper.add("blah/toe", "blah"))
126
+ # assert_equal( "blah", @wrapper.get("blah/toe"))
127
+ # end
128
+ #
129
+ # should "fetch value" do
130
+ # assert_equal( "blah", @wrapper.fetch("blah/toe") { "blah" })
131
+ # assert_equal( "blah", @wrapper.fetch("blah/toe") { "blah2" })
132
+ # end
133
+ #
134
+ # should "check and set value" do
135
+ # assert_nil( @wrapper.cas("blah/toe") { "blah" })
136
+ # assert_stored(@wrapper.add("blah/toe", "blah"))
137
+ # assert_stored(@wrapper.cas("blah/toe") { "blah2" })
138
+ # assert_equal( "blah2", @wrapper.get("blah/toe"))
139
+ # end
140
+ #
141
+ # should "get multiple values" do
142
+ # assert_stored(@wrapper.add("blah/toe", "blah"))
143
+ # assert_stored(@wrapper.add("blah/finger", "blah2"))
144
+ # assert_equal( {'blah/toe'=>'blah','blah/finger'=>'blah2'}, @wrapper.get_multi(["blah/toe", "blah/finger"]))
145
+ # end
146
+ #
147
+ # should "set value" do
148
+ # assert_stored(@wrapper.set("blah/toe", "blah"))
149
+ # assert_equal( "blah", @wrapper.get("blah/toe"))
150
+ # end
151
+ #
152
+ # should "append value" do
153
+ # assert_not_stored( @wrapper.append("blah/toe", "blah"))
154
+ # assert_nil( @wrapper.get("blah/toe"))
155
+ #
156
+ # assert_stored( @wrapper.set("blah/toe", "blah", 0, true))
157
+ # assert_equal( "blah", @wrapper.get("blah/toe", true))
158
+ # assert_stored( @wrapper.append("blah/toe", "blah2"))
159
+ # assert_equal( "blahblah2", @wrapper.get("blah/toe", true))
160
+ # end
161
+ #
162
+ # should "prepend value" do
163
+ # assert_not_stored(@wrapper.prepend("blah/toe", "blah"))
164
+ # assert_nil( @wrapper.get("blah/toe"))
165
+ #
166
+ # assert_stored( @wrapper.set("blah/toe", "blah", 0, true))
167
+ # assert_stored( @wrapper.prepend("blah/toe", "blah2"))
168
+ # assert_equal( "blah2blah", @wrapper.get("blah/toe", true))
169
+ # end
170
+ #
171
+ # should "delete value" do
172
+ # assert_not_found( @wrapper.delete("blah/toe"))
173
+ # assert_stored( @wrapper.set("blah/toe", "blah"))
174
+ # assert_deleted( @wrapper.delete("blah/toe"))
175
+ # end
176
+ #
177
+ # should "increment value" do
178
+ # assert_nil( @wrapper.incr("blah/count"))
179
+ # assert_stored(@wrapper.set("blah/count", 0, 0, true))
180
+ # assert_equal( 1, @wrapper.incr("blah/count"))
181
+ # end
182
+ #
183
+ # should "decrement value" do
184
+ # assert_nil( @wrapper.decr("blah/count"))
185
+ # assert_stored(@wrapper.set("blah/count", 2, 0, true))
186
+ # assert_equal( 1, @wrapper.decr("blah/count"))
187
+ # end
188
+ #
189
+ # end
190
+
191
+ private
192
+
193
+ def assert_stored(val)
194
+ assert_equal("STORED\r\n", val)
195
+ end
196
+
197
+ def assert_deleted(val)
198
+ assert_equal("DELETED\r\n", val)
199
+ end
200
+
201
+ def assert_not_stored(val)
202
+ assert_equal("NOT_STORED\r\n", val)
203
+ end
204
+
205
+ def assert_not_found(val)
206
+ assert_equal("NOT_FOUND\r\n", val)
207
+ end
208
+
209
+ end
@@ -1,7 +1,7 @@
1
1
  dir = File.dirname(__FILE__)
2
2
  $LOAD_PATH.unshift "#{dir}/../lib"
3
3
 
4
- require 'rubygems'
4
+ require File.join(dir, '../config/environment')
5
5
  require 'spec'
6
6
  require 'pp'
7
7
  require 'cache_money'
@@ -9,8 +9,6 @@ require 'cache_money'
9
9
  require 'memcached'
10
10
  require 'memcached_wrapper'
11
11
 
12
- require File.join(dir, '../config/environment')
13
-
14
12
  Spec::Runner.configure do |config|
15
13
  config.mock_with :rr
16
14
  config.before :suite do
@@ -42,6 +40,11 @@ Spec::Runner.configure do |config|
42
40
  index :published
43
41
  end
44
42
 
43
+ Short = Class.new(Story)
44
+ Short.class_eval do
45
+ index :subtitle, :order_column => 'title'
46
+ end
47
+
45
48
  Epic = Class.new(Story)
46
49
  Oral = Class.new(Epic)
47
50
 
metadata CHANGED
@@ -1,58 +1,79 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ngmoco-cache-money
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 13
9
+ version: 0.2.13
5
10
  platform: ruby
6
11
  authors:
7
12
  - Nick Kallen
8
13
  - Ashley Martens
14
+ - Scott Mace
15
+ - John Markos
9
16
  autorequire:
10
17
  bindir: bin
11
18
  cert_chain: []
12
19
 
13
- date: 2010-01-08 00:00:00 -08:00
20
+ date: 2010-08-05 00:00:00 -07:00
14
21
  default_executable:
15
22
  dependencies:
16
23
  - !ruby/object:Gem::Dependency
17
- name: activerecord
18
- type: :runtime
19
- version_requirement:
20
- version_requirements: !ruby/object:Gem::Requirement
24
+ requirement: &id001 !ruby/object:Gem::Requirement
21
25
  requirements:
22
26
  - - ">="
23
27
  - !ruby/object:Gem::Version
28
+ segments:
29
+ - 2
30
+ - 2
31
+ - 0
24
32
  version: 2.2.0
25
- version:
26
- - !ruby/object:Gem::Dependency
27
- name: activesupport
33
+ prerelease: false
28
34
  type: :runtime
29
- version_requirement:
30
- version_requirements: !ruby/object:Gem::Requirement
35
+ name: activerecord
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ requirement: &id002 !ruby/object:Gem::Requirement
31
39
  requirements:
32
40
  - - ">="
33
41
  - !ruby/object:Gem::Version
42
+ segments:
43
+ - 2
44
+ - 2
45
+ - 0
34
46
  version: 2.2.0
35
- version:
36
- description: Cache utilities.
47
+ prerelease: false
48
+ type: :runtime
49
+ name: activesupport
50
+ version_requirements: *id002
51
+ description: Write-through and Read-through Cacheing for ActiveRecord
37
52
  email: teamplatform@ngmoco.com
38
53
  executables: []
39
54
 
40
55
  extensions: []
41
56
 
42
- extra_rdoc_files: []
43
-
57
+ extra_rdoc_files:
58
+ - LICENSE
59
+ - README
60
+ - README.markdown
61
+ - TODO
44
62
  files:
45
63
  - README
46
64
  - TODO
47
65
  - UNSUPPORTED_FEATURES
66
+ - init.rb
67
+ - lib/cache_money.rb
48
68
  - lib/cash/accessor.rb
49
69
  - lib/cash/buffered.rb
50
70
  - lib/cash/config.rb
71
+ - lib/cash/fake.rb
51
72
  - lib/cash/finders.rb
52
73
  - lib/cash/index.rb
53
74
  - lib/cash/local.rb
54
75
  - lib/cash/lock.rb
55
- - lib/cash/fake.rb
76
+ - lib/cash/mock.rb
56
77
  - lib/cash/query/abstract.rb
57
78
  - lib/cash/query/calculation.rb
58
79
  - lib/cash/query/primary_key.rb
@@ -62,35 +83,39 @@ files:
62
83
  - lib/cash/util/array.rb
63
84
  - lib/cash/util/marshal.rb
64
85
  - lib/cash/write_through.rb
65
- - lib/cache_money.rb
86
+ - lib/mem_cached_session_store.rb
87
+ - lib/mem_cached_support_store.rb
66
88
  - lib/memcached_wrapper.rb
67
89
  - rails/init.rb
68
- - init.rb
90
+ - LICENSE
91
+ - README.markdown
69
92
  has_rdoc: true
70
93
  homepage: http://github.com/ngmoco/cache-money
71
94
  licenses: []
72
95
 
73
96
  post_install_message:
74
- rdoc_options: []
75
-
97
+ rdoc_options:
98
+ - --charset=UTF-8
76
99
  require_paths:
77
100
  - lib
78
101
  required_ruby_version: !ruby/object:Gem::Requirement
79
102
  requirements:
80
103
  - - ">="
81
104
  - !ruby/object:Gem::Version
105
+ segments:
106
+ - 0
82
107
  version: "0"
83
- version:
84
108
  required_rubygems_version: !ruby/object:Gem::Requirement
85
109
  requirements:
86
110
  - - ">="
87
111
  - !ruby/object:Gem::Version
112
+ segments:
113
+ - 0
88
114
  version: "0"
89
- version:
90
115
  requirements: []
91
116
 
92
117
  rubyforge_project:
93
- rubygems_version: 1.3.5
118
+ rubygems_version: 1.3.6
94
119
  signing_key:
95
120
  specification_version: 3
96
121
  summary: Write-through and Read-through Cacheing for ActiveRecord
@@ -100,12 +125,16 @@ test_files:
100
125
  - db/schema.rb
101
126
  - spec/cash/accessor_spec.rb
102
127
  - spec/cash/active_record_spec.rb
128
+ - spec/cash/buffered_spec.rb
103
129
  - spec/cash/calculations_spec.rb
104
130
  - spec/cash/finders_spec.rb
131
+ - spec/cash/local_buffer_spec.rb
132
+ - spec/cash/local_spec.rb
105
133
  - spec/cash/lock_spec.rb
134
+ - spec/cash/marshal_spec.rb
106
135
  - spec/cash/order_spec.rb
107
136
  - spec/cash/transactional_spec.rb
108
137
  - spec/cash/window_spec.rb
109
138
  - spec/cash/write_through_spec.rb
110
- - spec/cash/marshal_spec.rb
139
+ - spec/memcached_wrapper_test.rb
111
140
  - spec/spec_helper.rb