moneta 0.8.0 → 0.8.1
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.
- checksums.yaml +4 -4
- data/.travis.yml +9 -4
- data/CHANGES +15 -0
- data/CONTRIBUTORS +6 -0
- data/Gemfile +21 -14
- data/README.md +2 -2
- data/lib/moneta/adapters/file.rb +2 -1
- data/lib/moneta/adapters/lruhash.rb +14 -11
- data/lib/moneta/adapters/memcached/dalli.rb +1 -1
- data/lib/moneta/adapters/memcached/native.rb +6 -0
- data/lib/moneta/adapters/mongo/base.rb +16 -1
- data/lib/moneta/adapters/mongo/moped.rb +2 -8
- data/lib/moneta/adapters/mongo/official.rb +31 -35
- data/lib/moneta/adapters/sequel.rb +1 -1
- data/lib/moneta/adapters/tokyotyrant.rb +13 -4
- data/lib/moneta/builder.rb +1 -1
- data/lib/moneta/transformer/config.rb +2 -2
- data/lib/moneta/transformer/helper.rb +16 -2
- data/lib/moneta/transformer/helper/bson.rb +25 -0
- data/lib/moneta/version.rb +1 -1
- data/lib/rack/cache/moneta.rb +2 -2
- data/script/generate-specs +216 -89
- data/script/start-services +6 -6
- data/spec/helper.rb +1 -1
- data/spec/moneta/adapter_datamapper_spec.rb +1 -1
- data/spec/moneta/adapter_lruhash_spec.rb +94 -1
- data/spec/moneta/adapter_mongo_moped_spec.rb +12 -4
- data/spec/moneta/adapter_mongo_moped_with_default_expires_spec.rb +3 -1
- data/spec/moneta/adapter_mongo_official_spec.rb +12 -4
- data/spec/moneta/adapter_mongo_official_with_default_expires_spec.rb +3 -1
- data/spec/moneta/adapter_mongo_spec.rb +2 -1
- data/spec/moneta/adapter_mongo_with_default_expires_spec.rb +3 -1
- data/spec/moneta/mutex_spec.rb +12 -12
- data/spec/moneta/optionmerger_spec.rb +1 -1
- data/spec/moneta/semaphore_spec.rb +15 -15
- data/spec/moneta/shared_tcp_spec.rb +1 -1
- data/spec/moneta/shared_unix_spec.rb +1 -1
- data/spec/moneta/standard_mongo_moped_spec.rb +1 -1
- data/spec/moneta/standard_mongo_official_spec.rb +1 -1
- data/spec/moneta/standard_mongo_spec.rb +1 -1
- data/spec/moneta/transformer_bson_spec.rb +6 -1
- data/spec/moneta/transformer_bzip2_spec.rb +1 -1
- data/spec/monetaspecs.rb +2434 -2434
- data/spec/rack/cache_moneta_spec.rb +2 -2
- data/spec/rack/moneta_store_spec.rb +1 -1
- metadata +196 -12
- data/script/install-bundle +0 -38
- data/script/upload-bundle +0 -2
- data/script/wait-services +0 -15
data/script/start-services
CHANGED
@@ -3,9 +3,9 @@
|
|
3
3
|
echo 'Starting TokyoTyrant'
|
4
4
|
/usr/sbin/ttserver -dmn -pid /tmp/ttserver.pid -log /tmp/ttserver.log -port 1978
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
# Waiting for servers to start
|
7
|
+
sleep 3
|
8
|
+
|
9
|
+
echo 'TokyoTyrant status'
|
10
|
+
ps aux | grep ttserver
|
11
|
+
cat /tmp/ttserver.log
|
data/spec/helper.rb
CHANGED
@@ -37,7 +37,100 @@ describe_moneta "adapter_lruhash" do
|
|
37
37
|
(0...[9, i-1].min).each do |j|
|
38
38
|
store.instance_variable_get(:@entry)[i-j].should_not be_nil
|
39
39
|
end
|
40
|
-
store.key?(i-9).should
|
40
|
+
store.key?(i-9).should be false if i > 9
|
41
41
|
end
|
42
42
|
end
|
43
|
+
|
44
|
+
it 'adds a value that is the same as max_size' do
|
45
|
+
store = Moneta::Adapters::LRUHash.new(max_size: 21)
|
46
|
+
store[:a_key] = 'This is 21 bytes long'
|
47
|
+
store[:a_key].should eq('This is 21 bytes long')
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'does not add a value that is larger than max_size' do
|
51
|
+
store = Moneta::Adapters::LRUHash.new(max_size: 20)
|
52
|
+
store[:too_long] = 'This is 21 bytes long'
|
53
|
+
store[:too_long].should be_nil
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'removes an existing key that is replaced by an item that is larger than max_size' do
|
57
|
+
store = Moneta::Adapters::LRUHash.new(max_size: 20)
|
58
|
+
store[:a_key] = 'This will fit'
|
59
|
+
store[:a_key] = 'This is 21 bytes long'
|
60
|
+
store[:a_key].should be_nil
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'does not add a value that is larger than max_size, when max_value is explicitly missing' do
|
64
|
+
store = Moneta::Adapters::LRUHash.new(max_size: 20, max_value: nil)
|
65
|
+
store[:too_long] = 'This is 21 bytes long'
|
66
|
+
store[:too_long].should be_nil
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'does not add a value that is larger than max_size, even if max_value is larger than max_size' do
|
70
|
+
store = Moneta::Adapters::LRUHash.new(max_size: 20, max_value: 25)
|
71
|
+
store[:too_long] = 'This is 21 bytes long'
|
72
|
+
store[:too_long].should be_nil
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'adds a value that is as large as the default max_size when max_size is missing' do
|
76
|
+
store = Moneta::Adapters::LRUHash.new
|
77
|
+
large_item = 'Really big'
|
78
|
+
allow(large_item).to receive(:bytesize).and_return(Moneta::Adapters::LRUHash::DEFAULT_MAX_SIZE)
|
79
|
+
store[:really_big] = large_item
|
80
|
+
store[:really_big].should eq(large_item)
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'does not add values that are larger than the default max_size when max_size is missing' do
|
84
|
+
store = Moneta::Adapters::LRUHash.new
|
85
|
+
large_item = 'Really big'
|
86
|
+
allow(large_item).to receive(:bytesize).and_return(Moneta::Adapters::LRUHash::DEFAULT_MAX_SIZE + 1)
|
87
|
+
store[:really_big] = large_item
|
88
|
+
store[:really_big].should be_nil
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'adds values that are larger than the default max_size when max_size is nil' do
|
92
|
+
store = Moneta::Adapters::LRUHash.new(max_size: nil)
|
93
|
+
large_item = 'Really big'
|
94
|
+
allow(large_item).to receive(:bytesize).and_return(Moneta::Adapters::LRUHash::DEFAULT_MAX_SIZE + 1)
|
95
|
+
store[:really_big] = large_item
|
96
|
+
store[:really_big].should eq(large_item)
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'adds an individual value that is equal to max_value' do
|
100
|
+
store = Moneta::Adapters::LRUHash.new(max_value: 13)
|
101
|
+
store[:a_key] = '13 bytes long'
|
102
|
+
store[:a_key].should eq('13 bytes long')
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'does not add a value that is larger than max_value' do
|
106
|
+
store = Moneta::Adapters::LRUHash.new(max_value: 20)
|
107
|
+
store[:too_long] = 'This is 21 bytes long'
|
108
|
+
store[:too_long].should be_nil
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'removes keys that are replaced by values larger than max_value' do
|
112
|
+
store = Moneta::Adapters::LRUHash.new(max_value: 20)
|
113
|
+
store[:too_long] = 'This will fit'
|
114
|
+
store[:too_long] = 'This is 21 bytes long'
|
115
|
+
store[:too_long].should be_nil
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'only allows the default number of items when max_count is missing' do
|
119
|
+
stub_const('Moneta::Adapters::LRUHash::DEFAULT_MAX_COUNT', 5)
|
120
|
+
store = Moneta::Adapters::LRUHash.new(max_value: nil, max_size: nil)
|
121
|
+
(1..6).each { |n| store[n] = n }
|
122
|
+
store.key?(1).should be false
|
123
|
+
store[1].should be_nil
|
124
|
+
store[2].should eq(2)
|
125
|
+
store[6].should eq(6)
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'adds more values than DEFAULT_MAX_COUNT allows when max_count is nil' do
|
129
|
+
stub_const('Moneta::Adapters::LRUHash::DEFAULT_MAX_COUNT', 5)
|
130
|
+
store = Moneta::Adapters::LRUHash.new(max_count: nil, max_value: nil, max_size: nil)
|
131
|
+
(1..6).each { |n| store[n] = n }
|
132
|
+
store[1].should eq(1)
|
133
|
+
store[2].should eq(2)
|
134
|
+
store[6].should eq(6)
|
135
|
+
end
|
43
136
|
end
|
@@ -8,7 +8,8 @@ describe_moneta "adapter_mongo_moped" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def new_store
|
11
|
-
Moneta::Adapters::MongoMoped.new(db: "adapter_mongo"
|
11
|
+
Moneta::Adapters::MongoMoped.new(db: "adapter_mongo",
|
12
|
+
collection: 'moped')
|
12
13
|
end
|
13
14
|
|
14
15
|
def load_value(value)
|
@@ -49,8 +50,15 @@ describe_moneta "adapter_mongo_moped" do
|
|
49
50
|
it_should_behave_like 'store_large'
|
50
51
|
it 'automatically deletes expired document' do
|
51
52
|
store.store('key', 'val', expires: 5)
|
52
|
-
|
53
|
-
|
54
|
-
store.instance_variable_get(:@collection).find(
|
53
|
+
|
54
|
+
i = 0
|
55
|
+
query = store.instance_variable_get(:@collection).find(_id: ::BSON::Binary.new('key'))
|
56
|
+
while i < 70 && query.first
|
57
|
+
i += 1
|
58
|
+
sleep 1 # Mongo needs up to 60 seconds
|
59
|
+
end
|
60
|
+
|
61
|
+
i.should be > 0 # Indicates that it took at least one sleep to expire
|
62
|
+
query.count.should == 0
|
55
63
|
end
|
56
64
|
end
|
@@ -8,7 +8,9 @@ describe_moneta "adapter_mongo_moped_with_default_expires" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def new_store
|
11
|
-
Moneta::Adapters::MongoMoped.new(
|
11
|
+
Moneta::Adapters::MongoMoped.new(db: "adapter_mongo",
|
12
|
+
collection: 'moped_with_default_expires',
|
13
|
+
expires: 1)
|
12
14
|
end
|
13
15
|
|
14
16
|
def load_value(value)
|
@@ -8,7 +8,8 @@ describe_moneta "adapter_mongo_official" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def new_store
|
11
|
-
Moneta::Adapters::MongoOfficial.new(db: "adapter_mongo"
|
11
|
+
Moneta::Adapters::MongoOfficial.new(db: "adapter_mongo",
|
12
|
+
collection: 'official')
|
12
13
|
end
|
13
14
|
|
14
15
|
def load_value(value)
|
@@ -49,8 +50,15 @@ describe_moneta "adapter_mongo_official" do
|
|
49
50
|
it_should_behave_like 'store_large'
|
50
51
|
it 'automatically deletes expired document' do
|
51
52
|
store.store('key', 'val', expires: 5)
|
52
|
-
|
53
|
-
|
54
|
-
store.instance_variable_get(:@collection).
|
53
|
+
|
54
|
+
i = 0
|
55
|
+
query = store.instance_variable_get(:@collection).find(_id: ::BSON::Binary.new('key'))
|
56
|
+
while i < 70 && query.first
|
57
|
+
i += 1
|
58
|
+
sleep 1 # Mongo needs up to 60 seconds
|
59
|
+
end
|
60
|
+
|
61
|
+
i.should be > 0 # Indicates that it took at least one sleep to expire
|
62
|
+
query.count.should == 0
|
55
63
|
end
|
56
64
|
end
|
@@ -8,7 +8,9 @@ describe_moneta "adapter_mongo_official_with_default_expires" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def new_store
|
11
|
-
Moneta::Adapters::MongoOfficial.new(
|
11
|
+
Moneta::Adapters::MongoOfficial.new(db: "adapter_mongo",
|
12
|
+
collection: 'official_with_default_expires',
|
13
|
+
expires: 1)
|
12
14
|
end
|
13
15
|
|
14
16
|
def load_value(value)
|
@@ -8,7 +8,9 @@ describe_moneta "adapter_mongo_with_default_expires" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def new_store
|
11
|
-
Moneta::Adapters::Mongo.new(
|
11
|
+
Moneta::Adapters::Mongo.new(db: "adapter_mongo",
|
12
|
+
collection: 'with_default_expires',
|
13
|
+
expires: 1)
|
12
14
|
end
|
13
15
|
|
14
16
|
def load_value(value)
|
data/spec/moneta/mutex_spec.rb
CHANGED
@@ -19,8 +19,8 @@ describe_moneta "mutex" do
|
|
19
19
|
|
20
20
|
it 'should have #lock' do
|
21
21
|
mutex = Moneta::Mutex.new(store, 'mutex')
|
22
|
-
mutex.lock.should
|
23
|
-
mutex.locked?.should
|
22
|
+
mutex.lock.should be true
|
23
|
+
mutex.locked?.should be true
|
24
24
|
expect do
|
25
25
|
mutex.lock
|
26
26
|
end.to raise_error(RuntimeError)
|
@@ -28,13 +28,13 @@ describe_moneta "mutex" do
|
|
28
28
|
mutex.try_lock
|
29
29
|
end.to raise_error(RuntimeError)
|
30
30
|
mutex.unlock.should be_nil
|
31
|
-
mutex.locked?.should
|
31
|
+
mutex.locked?.should be false
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'should have #enter' do
|
35
35
|
mutex = Moneta::Mutex.new(store, 'mutex')
|
36
|
-
mutex.enter.should
|
37
|
-
mutex.locked?.should
|
36
|
+
mutex.enter.should be true
|
37
|
+
mutex.locked?.should be true
|
38
38
|
expect do
|
39
39
|
mutex.enter
|
40
40
|
end.to raise_error(RuntimeError)
|
@@ -42,31 +42,31 @@ describe_moneta "mutex" do
|
|
42
42
|
mutex.try_enter
|
43
43
|
end.to raise_error(RuntimeError)
|
44
44
|
mutex.leave.should be_nil
|
45
|
-
mutex.locked?.should
|
45
|
+
mutex.locked?.should be false
|
46
46
|
end
|
47
47
|
|
48
48
|
it 'should lock with #lock' do
|
49
49
|
a = Moneta::Mutex.new(store, 'mutex')
|
50
50
|
b = Moneta::Mutex.new(store, 'mutex')
|
51
|
-
a.lock.should
|
52
|
-
b.try_lock.should
|
51
|
+
a.lock.should be true
|
52
|
+
b.try_lock.should be false
|
53
53
|
a.unlock.should be_nil
|
54
54
|
end
|
55
55
|
|
56
56
|
it 'should have lock timeout' do
|
57
57
|
a = Moneta::Mutex.new(store, 'mutex')
|
58
58
|
b = Moneta::Mutex.new(store, 'mutex')
|
59
|
-
a.lock.should
|
60
|
-
b.lock(1).should
|
59
|
+
a.lock.should be true
|
60
|
+
b.lock(1).should be false
|
61
61
|
a.unlock.should be_nil
|
62
62
|
end
|
63
63
|
|
64
64
|
it 'should have #synchronize' do
|
65
65
|
mutex = Moneta::Mutex.new(store, 'mutex')
|
66
66
|
mutex.synchronize do
|
67
|
-
mutex.locked?.should
|
67
|
+
mutex.locked?.should be true
|
68
68
|
end
|
69
|
-
mutex.locked?.should
|
69
|
+
mutex.locked?.should be false
|
70
70
|
end
|
71
71
|
|
72
72
|
end
|
@@ -105,7 +105,7 @@ describe_moneta "optionmerger" do
|
|
105
105
|
compressed_store['key'] = 'compressed value'
|
106
106
|
store['key'].should == 'uncompressed value'
|
107
107
|
compressed_store['key'].should == 'compressed value'
|
108
|
-
store.key?('compressedkey').should
|
108
|
+
store.key?('compressedkey').should be true
|
109
109
|
# Check if value is compressed
|
110
110
|
compressed_store['key'].should_not == store['compressedkey']
|
111
111
|
end
|
@@ -19,8 +19,8 @@ describe_moneta "semaphore" do
|
|
19
19
|
|
20
20
|
it 'should have #lock' do
|
21
21
|
mutex = Moneta::Semaphore.new(store, 'semaphore')
|
22
|
-
mutex.lock.should
|
23
|
-
mutex.locked?.should
|
22
|
+
mutex.lock.should be true
|
23
|
+
mutex.locked?.should be true
|
24
24
|
expect do
|
25
25
|
mutex.lock
|
26
26
|
end.to raise_error(RuntimeError)
|
@@ -28,13 +28,13 @@ describe_moneta "semaphore" do
|
|
28
28
|
mutex.try_lock
|
29
29
|
end.to raise_error(RuntimeError)
|
30
30
|
mutex.unlock.should be_nil
|
31
|
-
mutex.locked?.should
|
31
|
+
mutex.locked?.should be false
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'should have #enter' do
|
35
35
|
mutex = Moneta::Semaphore.new(store, 'semaphore')
|
36
|
-
mutex.enter.should
|
37
|
-
mutex.locked?.should
|
36
|
+
mutex.enter.should be true
|
37
|
+
mutex.locked?.should be true
|
38
38
|
expect do
|
39
39
|
mutex.enter
|
40
40
|
end.to raise_error(RuntimeError)
|
@@ -42,22 +42,22 @@ describe_moneta "semaphore" do
|
|
42
42
|
mutex.try_enter
|
43
43
|
end.to raise_error(RuntimeError)
|
44
44
|
mutex.leave.should be_nil
|
45
|
-
mutex.locked?.should
|
45
|
+
mutex.locked?.should be false
|
46
46
|
end
|
47
47
|
|
48
48
|
it 'should lock with #lock' do
|
49
49
|
a = Moneta::Semaphore.new(store, 'semaphore')
|
50
50
|
b = Moneta::Semaphore.new(store, 'semaphore')
|
51
|
-
a.lock.should
|
52
|
-
b.try_lock.should
|
51
|
+
a.lock.should be true
|
52
|
+
b.try_lock.should be false
|
53
53
|
a.unlock.should be_nil
|
54
54
|
end
|
55
55
|
|
56
56
|
it 'should have lock timeout' do
|
57
57
|
a = Moneta::Semaphore.new(store, 'semaphore')
|
58
58
|
b = Moneta::Semaphore.new(store, 'semaphore')
|
59
|
-
a.lock.should
|
60
|
-
b.lock(1).should
|
59
|
+
a.lock.should be true
|
60
|
+
b.lock(1).should be false
|
61
61
|
a.unlock.should be_nil
|
62
62
|
end
|
63
63
|
|
@@ -66,10 +66,10 @@ describe_moneta "semaphore" do
|
|
66
66
|
b = Moneta::Semaphore.new(store, 'semaphore', 2)
|
67
67
|
c = Moneta::Semaphore.new(store, 'semaphore', 2)
|
68
68
|
a.synchronize do
|
69
|
-
a.locked?.should
|
69
|
+
a.locked?.should be true
|
70
70
|
b.synchronize do
|
71
|
-
b.locked?.should
|
72
|
-
c.try_lock.should
|
71
|
+
b.locked?.should be true
|
72
|
+
c.try_lock.should be false
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
@@ -77,9 +77,9 @@ describe_moneta "semaphore" do
|
|
77
77
|
it 'should have #synchronize' do
|
78
78
|
semaphore = Moneta::Semaphore.new(store, 'semaphore')
|
79
79
|
semaphore.synchronize do
|
80
|
-
semaphore.locked?.should
|
80
|
+
semaphore.locked?.should be true
|
81
81
|
end
|
82
|
-
semaphore.locked?.should
|
82
|
+
semaphore.locked?.should be false
|
83
83
|
end
|
84
84
|
|
85
85
|
end
|
@@ -38,7 +38,7 @@ describe_moneta "shared_tcp" do
|
|
38
38
|
it 'shares values' do
|
39
39
|
store['shared_key'] = 'shared_value'
|
40
40
|
second = new_store
|
41
|
-
second.key?('shared_key').should
|
41
|
+
second.key?('shared_key').should be true
|
42
42
|
second['shared_key'].should == 'shared_value'
|
43
43
|
second.close
|
44
44
|
end
|
@@ -38,7 +38,7 @@ describe_moneta "shared_unix" do
|
|
38
38
|
it 'shares values' do
|
39
39
|
store['shared_key'] = 'shared_value'
|
40
40
|
second = new_store
|
41
|
-
second.key?('shared_key').should
|
41
|
+
second.key?('shared_key').should be true
|
42
42
|
second['shared_key'].should == 'shared_value'
|
43
43
|
second.close
|
44
44
|
end
|
@@ -8,7 +8,7 @@ describe_moneta "standard_mongo_moped" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def new_store
|
11
|
-
Moneta.new(:MongoMoped, db: '
|
11
|
+
Moneta.new(:MongoMoped, db: 'standard_mongo', collection: 'moped', logger: {file: File.join(make_tempdir, 'standard_mongo_moped.log')})
|
12
12
|
end
|
13
13
|
|
14
14
|
def load_value(value)
|
@@ -8,7 +8,7 @@ describe_moneta "standard_mongo_official" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def new_store
|
11
|
-
Moneta.new(:MongoOfficial, db: '
|
11
|
+
Moneta.new(:MongoOfficial, db: 'standard_mongo', collection: 'official', logger: {file: File.join(make_tempdir, 'standard_mongo_official.log')})
|
12
12
|
end
|
13
13
|
|
14
14
|
def load_value(value)
|
@@ -8,7 +8,7 @@ describe_moneta "standard_mongo" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def new_store
|
11
|
-
Moneta.new(:Mongo, db: 'standard_mongo', logger: {file: File.join(make_tempdir, 'standard_mongo.log')})
|
11
|
+
Moneta.new(:Mongo, db: 'standard_mongo', collection: 'default', logger: {file: File.join(make_tempdir, 'standard_mongo.log')})
|
12
12
|
end
|
13
13
|
|
14
14
|
def load_value(value)
|