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.
- data/README +30 -34
- data/README.markdown +30 -34
- data/config/environment.rb +0 -8
- data/config/memcached.yml +0 -2
- data/init.rb +1 -1
- data/lib/cache_money.rb +55 -36
- data/lib/cash/adapter/memcache_client.rb +36 -0
- data/lib/cash/adapter/memcached.rb +131 -0
- data/lib/cash/adapter/redis.rb +152 -0
- data/lib/cash/config.rb +7 -4
- data/lib/cash/finders.rb +15 -3
- data/lib/cash/index.rb +3 -6
- data/lib/cash/local.rb +1 -1
- data/lib/cash/lock.rb +2 -2
- data/lib/cash/mock.rb +16 -12
- data/lib/cash/query/abstract.rb +29 -3
- data/lib/cash/version.rb +3 -0
- data/lib/cash/write_through.rb +9 -5
- data/lib/mem_cached_support_store.rb +1 -1
- data/rails/init.rb +1 -40
- data/spec/cash/calculations_spec.rb +11 -0
- data/spec/cash/finders_spec.rb +4 -4
- data/spec/cash/lock_spec.rb +30 -24
- data/spec/cash/marshal_spec.rb +1 -1
- data/spec/cash/transactional_spec.rb +19 -17
- data/spec/cash/without_caching_spec.rb +32 -0
- data/spec/cash/write_through_spec.rb +7 -0
- data/spec/spec_helper.rb +32 -6
- metadata +136 -45
- data/lib/memcached_wrapper.rb +0 -263
- data/spec/memcached_wrapper_test.rb +0 -209
@@ -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
|
data/spec/cash/finders_spec.rb
CHANGED
@@ -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 '
|
391
|
-
|
392
|
-
|
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
|
|
data/spec/cash/lock_spec.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
35
|
-
lambda {
|
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
|
-
|
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
|
-
#
|
51
|
-
lambda {
|
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
|
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
|
-
|
59
|
+
lock.acquire_lock('lock_key')
|
58
60
|
as_another_process do
|
59
|
-
stub(
|
60
|
-
lambda {
|
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
|
-
|
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(
|
70
|
-
lambda {
|
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(
|
78
|
-
stub(
|
79
|
-
stub(
|
80
|
-
stub(
|
81
|
-
|
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 {
|
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
|
-
|
107
|
+
lock.acquire_lock("lock_key")
|
102
108
|
$memcache.get("lock/lock_key").should_not == nil
|
103
|
-
|
109
|
+
lock.release_lock("lock_key")
|
104
110
|
$memcache.get("lock/lock_key").should == nil
|
105
111
|
end
|
106
112
|
end
|
data/spec/cash/marshal_spec.rb
CHANGED
@@ -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,
|
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(
|
235
|
+
mock(lock).acquire_lock(@key)
|
234
236
|
mock($memcache).set(@key, @value)
|
235
|
-
mock(
|
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(
|
244
|
-
mock(
|
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(
|
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(
|
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(
|
267
|
-
mock(
|
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(
|
418
|
-
mock(
|
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(
|
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(
|
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(
|
508
|
-
mock(
|
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(
|
547
|
-
mock(
|
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
|
data/spec/spec_helper.rb
CHANGED
@@ -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
|
-
|
19
|
-
|
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
|
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
|
-
-
|
10
|
-
|
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:
|
21
|
+
date: 2012-05-07 00:00:00 -07:00
|
22
22
|
default_executable:
|
23
23
|
dependencies:
|
24
24
|
- !ruby/object:Gem::Dependency
|
25
|
-
|
26
|
-
|
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
|
-
|
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
|
-
|
42
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
-
|
141
|
-
|
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.
|
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
|