metry 1.2.0 → 2.0.0
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/History.txt +6 -0
- data/Manifest.txt +14 -69
- data/TODO +2 -3
- data/cucumber.yml +1 -0
- data/example/example.rb +1 -1
- data/features/psycho/dashboard.feature +17 -0
- data/features/psycho/goals.feature +24 -0
- data/features/psycho/visitor_tracking.feature +32 -0
- data/features/step_definitions/goals.rb +3 -0
- data/features/step_definitions/tracking.rb +1 -1
- data/features/step_definitions/web.rb +14 -2
- data/features/support/env.rb +4 -0
- data/lib/metry.rb +4 -6
- data/lib/metry/experiment.rb +6 -8
- data/lib/metry/psycho.rb +112 -0
- data/lib/metry/psycho/dashboard.erb +14 -0
- data/lib/metry/psycho/layout.erb +8 -0
- data/lib/metry/psycho/new_goal.erb +9 -0
- data/lib/metry/psycho/visitor.erb +7 -0
- data/lib/metry/rack/tracking.rb +17 -13
- data/lib/metry/storage.rb +116 -0
- data/radiant/example/features/metry.feature +8 -8
- data/radiant/example/features/psycho.feature +13 -0
- data/radiant/example/features/step_definitions/experiments.rb +2 -2
- data/radiant/example/features/step_definitions/tracking.rb +1 -1
- data/radiant/example/features/support/env.rb +3 -0
- data/radiant/extension/lib/metry_authenticator.rb +30 -0
- data/radiant/extension/lib/metry_tags.rb +2 -1
- data/radiant/extension/metry_extension.rb +1 -1
- data/test/{test_tokyo.rb → test_storage.rb} +3 -3
- metadata +17 -72
- data/lib/metry/memory.rb +0 -27
- data/lib/metry/tokyo.rb +0 -181
- data/vendor/rufus-tokyo/CHANGELOG.txt +0 -112
- data/vendor/rufus-tokyo/CREDITS.txt +0 -27
- data/vendor/rufus-tokyo/LICENSE.txt +0 -21
- data/vendor/rufus-tokyo/README.txt +0 -310
- data/vendor/rufus-tokyo/Rakefile +0 -118
- data/vendor/rufus-tokyo/TODO.txt +0 -25
- data/vendor/rufus-tokyo/doc/decision_table.numbers +0 -0
- data/vendor/rufus-tokyo/doc/rdoc-style.css +0 -320
- data/vendor/rufus-tokyo/lib/rufus-edo.rb +0 -3
- data/vendor/rufus-tokyo/lib/rufus-tokyo.rb +0 -3
- data/vendor/rufus-tokyo/lib/rufus/edo.rb +0 -39
- data/vendor/rufus-tokyo/lib/rufus/edo/README.txt +0 -106
- data/vendor/rufus-tokyo/lib/rufus/edo/cabcore.rb +0 -333
- data/vendor/rufus-tokyo/lib/rufus/edo/cabinet/abstract.rb +0 -219
- data/vendor/rufus-tokyo/lib/rufus/edo/cabinet/table.rb +0 -159
- data/vendor/rufus-tokyo/lib/rufus/edo/error.rb +0 -36
- data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant.rb +0 -4
- data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant/abstract.rb +0 -137
- data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant/table.rb +0 -141
- data/vendor/rufus-tokyo/lib/rufus/edo/tabcore.rb +0 -567
- data/vendor/rufus-tokyo/lib/rufus/tokyo.rb +0 -58
- data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/abstract.rb +0 -568
- data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/lib.rb +0 -230
- data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/table.rb +0 -753
- data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/util.rb +0 -425
- data/vendor/rufus-tokyo/lib/rufus/tokyo/config.rb +0 -161
- data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia.rb +0 -43
- data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia/lib.rb +0 -65
- data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia/words.rb +0 -71
- data/vendor/rufus-tokyo/lib/rufus/tokyo/hmethods.rb +0 -111
- data/vendor/rufus-tokyo/lib/rufus/tokyo/query.rb +0 -102
- data/vendor/rufus-tokyo/lib/rufus/tokyo/transactions.rb +0 -74
- data/vendor/rufus-tokyo/lib/rufus/tokyo/ttcommons.rb +0 -59
- data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant.rb +0 -35
- data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/abstract.rb +0 -146
- data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/lib.rb +0 -153
- data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/table.rb +0 -162
- data/vendor/rufus-tokyo/rufus-tokyo.gemspec +0 -25
- data/vendor/rufus-tokyo/spec/cabinet_spec.rb +0 -472
- data/vendor/rufus-tokyo/spec/cabinetconfig_spec.rb +0 -82
- data/vendor/rufus-tokyo/spec/edo_cabinet_spec.rb +0 -447
- data/vendor/rufus-tokyo/spec/edo_ntyrant_spec.rb +0 -299
- data/vendor/rufus-tokyo/spec/edo_ntyrant_table_spec.rb +0 -462
- data/vendor/rufus-tokyo/spec/edo_table_spec.rb +0 -560
- data/vendor/rufus-tokyo/spec/hmethods_spec.rb +0 -44
- data/vendor/rufus-tokyo/spec/incr.lua +0 -20
- data/vendor/rufus-tokyo/spec/spec.rb +0 -9
- data/vendor/rufus-tokyo/spec/spec_base.rb +0 -23
- data/vendor/rufus-tokyo/spec/start_tyrants.sh +0 -26
- data/vendor/rufus-tokyo/spec/stop_tyrants.sh +0 -9
- data/vendor/rufus-tokyo/spec/table_spec.rb +0 -567
- data/vendor/rufus-tokyo/spec/tyrant_spec.rb +0 -309
- data/vendor/rufus-tokyo/spec/tyrant_table_spec.rb +0 -479
- data/vendor/rufus-tokyo/spec/util_list_spec.rb +0 -200
- data/vendor/rufus-tokyo/spec/util_map_spec.rb +0 -132
- data/vendor/rufus-tokyo/tasks/dev.rb +0 -70
- data/vendor/rufus-tokyo/test/bm0.rb +0 -353
- data/vendor/rufus-tokyo/test/bm1_compression.rb +0 -54
- data/vendor/rufus-tokyo/test/con0.rb +0 -30
- data/vendor/rufus-tokyo/test/mem.rb +0 -49
- data/vendor/rufus-tokyo/test/mem1.rb +0 -44
- data/vendor/rufus-tokyo/test/readme0.rb +0 -17
- data/vendor/rufus-tokyo/test/readme1.rb +0 -21
- data/vendor/rufus-tokyo/test/readme2.rb +0 -15
- data/vendor/rufus-tokyo/test/readme3.rb +0 -24
- data/vendor/rufus-tokyo/test/readmes_test.sh +0 -17
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
# Specifying rufus-tokyo
|
|
4
|
-
#
|
|
5
|
-
# Sun Feb 8 16:01:51 JST 2009
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
require File.dirname(__FILE__) + '/spec_base'
|
|
9
|
-
|
|
10
|
-
require 'rufus/tokyo'
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
describe 'Rufus::Tokyo::CabinetConfig' do
|
|
14
|
-
|
|
15
|
-
before do
|
|
16
|
-
@c = Object.new
|
|
17
|
-
@c.extend(Rufus::Tokyo::CabinetConfig)
|
|
18
|
-
class << @c
|
|
19
|
-
public :determine_open_mode, :determine_conf
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it 'should open with mode=cw by default' do
|
|
24
|
-
|
|
25
|
-
@c.determine_open_mode({ :mode => ''}).should.equal(6)
|
|
26
|
-
@c.determine_open_mode({ 'mode' => '' }).should.equal(6)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it 'should determine mode flags correctly' do
|
|
30
|
-
|
|
31
|
-
@c.determine_open_mode( :mode => 'e').should.equal(16)
|
|
32
|
-
@c.determine_open_mode( :mode => 're').should.equal(17)
|
|
33
|
-
@c.determine_open_mode( :mode => 'ce').should.equal(20)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it 'should separate path from params' do
|
|
37
|
-
|
|
38
|
-
@c.determine_conf(
|
|
39
|
-
'nada.tdb#mode=r', {}, '.tdb')[:path].should.equal('nada.tdb')
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it 'should not accept suffixes else than .tdb' do
|
|
43
|
-
|
|
44
|
-
lambda {
|
|
45
|
-
@c.determine_conf('nada.tcx', {}, '.tdb').should.be.nil
|
|
46
|
-
}.should.raise(RuntimeError)
|
|
47
|
-
|
|
48
|
-
lambda {
|
|
49
|
-
@c.determine_conf('nada.tcx#mode=r', {}, '.tdb').should.be.nil
|
|
50
|
-
}.should.raise(RuntimeError)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it 'should grant write/create by default' do
|
|
54
|
-
|
|
55
|
-
@c.determine_conf('nada.tdb', {}, '.tdb')[:mode].should.equal(6)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it 'should respect :mutex' do
|
|
59
|
-
|
|
60
|
-
@c.determine_conf(
|
|
61
|
-
'nada.tdb#mutex=true', {}, '.tdb')[:mutex].should.equal(true)
|
|
62
|
-
@c.determine_conf(
|
|
63
|
-
'nada.tdb', { :mutex => true}, '.tdb')[:mutex].should.equal(true)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it 'should compute opts correctly' do
|
|
67
|
-
|
|
68
|
-
@c.determine_conf('nada.tdb', {}, '.tdb')[:opts].should.equal(0)
|
|
69
|
-
@c.determine_conf('nada.tdb#opts=ld', {}, '.tdb')[:opts].should.equal(3)
|
|
70
|
-
@c.determine_conf('nada.tdb', { :opts => 'ld' }, '.tdb')[:opts].should.equal(3)
|
|
71
|
-
@c.determine_conf('nada.tdb#opts=lb', {}, '.tdb')[:opts].should.equal(5)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it 'should accept :dfunit (TC 1.4.21)' do
|
|
75
|
-
|
|
76
|
-
@c.determine_conf('nada.tdb', {}, '.tdb')[:dfunit].should.equal(0)
|
|
77
|
-
@c.determine_conf('nada.tch#dfunit=8', {}, '.tch')[:dfunit].should.equal(8)
|
|
78
|
-
@c.determine_conf('nada.tct#dfunit=8', {}, '.tdb')[:dfunit].should.equal(8)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
end
|
|
82
|
-
|
|
@@ -1,447 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
# Specifying rufus-tokyo
|
|
4
|
-
#
|
|
5
|
-
# Sat Feb 21 22:16:23 JST 2009
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
require File.dirname(__FILE__) + '/spec_base'
|
|
9
|
-
|
|
10
|
-
begin
|
|
11
|
-
require 'rufus/edo'
|
|
12
|
-
rescue LoadError
|
|
13
|
-
puts "'TokyoCabinet' ruby bindings not available on this ruby platform"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
if defined?(TokyoCabinet)
|
|
17
|
-
|
|
18
|
-
FileUtils.mkdir('tmp') rescue nil
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
describe 'Rufus::Edo::Cabinet' do
|
|
22
|
-
|
|
23
|
-
before do
|
|
24
|
-
@db = Rufus::Edo::Cabinet.new('tmp/edo_cabinet_spec.tch')
|
|
25
|
-
@db.clear
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
after do
|
|
29
|
-
@db.close
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it 'should return its path' do
|
|
33
|
-
|
|
34
|
-
@db.path.should.equal('tmp/edo_cabinet_spec.tch')
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it 'should create its underlying file' do
|
|
38
|
-
|
|
39
|
-
File.exist?('tmp/cabinet_spec.tch').should.equal(true)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it 'should be empty initially' do
|
|
43
|
-
|
|
44
|
-
@db.size.should.equal(0)
|
|
45
|
-
@db['pillow'].should.be.nil
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it 'should accept values' do
|
|
49
|
-
|
|
50
|
-
@db['pillow'] = 'Shonagon'
|
|
51
|
-
@db.size.should.equal(1)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it 'should restitute values' do
|
|
55
|
-
|
|
56
|
-
@db['pillow'] = 'Shonagon'
|
|
57
|
-
@db['pillow'].should.equal('Shonagon')
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it 'should delete values' do
|
|
61
|
-
|
|
62
|
-
@db['pillow'] = 'Shonagon'
|
|
63
|
-
@db.delete('pillow').should.equal('Shonagon')
|
|
64
|
-
@db.size.should.equal(0)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it 'should reply to #keys and #values' do
|
|
68
|
-
|
|
69
|
-
keys = %w{ alpha bravo charly delta echo foxtrott }
|
|
70
|
-
keys.each_with_index { |k, i| @db[k] = i.to_s }
|
|
71
|
-
@db.keys.should.equal(keys)
|
|
72
|
-
@db.values.should.equal(%w{ 0 1 2 3 4 5 })
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it 'should reply to #keys when there are keys containing \0' do
|
|
76
|
-
|
|
77
|
-
s = "toto#{0.chr}nada"
|
|
78
|
-
@db[s] = s
|
|
79
|
-
@db.keys.should.equal([ s ])
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it 'should return a Ruby hash on merge' do
|
|
83
|
-
|
|
84
|
-
@db['a'] = 'A'
|
|
85
|
-
|
|
86
|
-
@db.merge({ 'b' => 'B', 'c' => 'C' }).should.equal(
|
|
87
|
-
{ 'a' => 'A', 'b' => 'B', 'c' => 'C' })
|
|
88
|
-
|
|
89
|
-
@db['b'].should.be.nil
|
|
90
|
-
|
|
91
|
-
@db.size.should.equal(1)
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
it 'should have more values in case of merge!' do
|
|
95
|
-
|
|
96
|
-
@db['a'] = 'A'
|
|
97
|
-
|
|
98
|
-
@db.merge!({ 'b' => 'B', 'c' => 'C' })
|
|
99
|
-
|
|
100
|
-
@db.size.should.equal(3)
|
|
101
|
-
@db['b'].should.equal('B')
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
describe 'Rufus::Edo::Cabinet #keys' do
|
|
106
|
-
|
|
107
|
-
before do
|
|
108
|
-
@n = 50
|
|
109
|
-
@cab = Rufus::Edo::Cabinet.new('tmp/cabinet_spec.tch')
|
|
110
|
-
@cab.clear
|
|
111
|
-
@n.times { |i| @cab["person#{i}"] = 'whoever' }
|
|
112
|
-
@n.times { |i| @cab["animal#{i}"] = 'whichever' }
|
|
113
|
-
@cab["toto#{0.chr}5"] = 'toto'
|
|
114
|
-
end
|
|
115
|
-
after do
|
|
116
|
-
@cab.close
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
it 'should return a Ruby Hash by default' do
|
|
120
|
-
|
|
121
|
-
@cab.keys.class.should.equal(::Array)
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
it 'should retrieve forward matching keys when :prefix => "prefix-"' do
|
|
125
|
-
|
|
126
|
-
@cab.keys(:prefix => 'person').size.should.equal(@n)
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it 'should retrieve keys that contain \0' do
|
|
130
|
-
|
|
131
|
-
@cab.keys.include?("toto#{0.chr}5").should.be.true
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
it 'should retrieve forward matching keys when key contains \0' do
|
|
135
|
-
|
|
136
|
-
@cab.keys(:prefix => 'toto').should.equal([ "toto#{0.chr}5" ])
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it 'should return a limited number of keys when :limit is set' do
|
|
140
|
-
|
|
141
|
-
@cab.keys(:limit => 20).size.should.equal(20)
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it 'should delete_keys_with_prefix' do
|
|
145
|
-
|
|
146
|
-
@cab.delete_keys_with_prefix('animal')
|
|
147
|
-
@cab.size.should.equal(@n + 1)
|
|
148
|
-
@cab.keys(:prefix => 'animal').size.should.equal(0)
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
describe 'Rufus::Edo::Cabinet' do
|
|
154
|
-
|
|
155
|
-
it 'should accept a default value' do
|
|
156
|
-
|
|
157
|
-
cab = Rufus::Edo::Cabinet.new(
|
|
158
|
-
'tmp/cabinet_spec_default.tch', :default => '@?!')
|
|
159
|
-
cab['a'] = 'A'
|
|
160
|
-
cab.size.should.equal(1)
|
|
161
|
-
cab['b'].should.equal('@?!')
|
|
162
|
-
cab.close
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
it 'should accept a default value (later)' do
|
|
166
|
-
|
|
167
|
-
cab = Rufus::Edo::Cabinet.new('tmp/cabinet_spec_default.tch')
|
|
168
|
-
cab.default = '@?!'
|
|
169
|
-
cab['a'] = 'A'
|
|
170
|
-
cab.size.should.equal(1)
|
|
171
|
-
cab['b'].should.equal('@?!')
|
|
172
|
-
cab.close
|
|
173
|
-
end
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
describe 'Rufus::Edo::Cabinet lget/lput/ldelete' do
|
|
178
|
-
|
|
179
|
-
before do
|
|
180
|
-
@cab = Rufus::Edo::Cabinet.new('tmp/edo_cabinet_spec.tch')
|
|
181
|
-
#@cab = Rufus::Edo::Cabinet.new('tmp/edo_cabinet_spec.tch', :type => :abstract)
|
|
182
|
-
@cab.clear
|
|
183
|
-
3.times { |i| @cab[i.to_s] = "val#{i}" }
|
|
184
|
-
end
|
|
185
|
-
after do
|
|
186
|
-
@cab.close
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
it 'should get multiple values' do
|
|
190
|
-
|
|
191
|
-
@cab.lget(%w{ 0 1 2 }).should.equal(
|
|
192
|
-
{"0"=>"val0", "1"=>"val1", "2"=>"val2"})
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
it 'should put multiple values' do
|
|
196
|
-
|
|
197
|
-
@cab.lput('3' => 'val3', '4' => 'val4')
|
|
198
|
-
@cab.lget(%w{ 2 3 }).should.equal({"2"=>"val2", "3"=>"val3"})
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
it 'should delete multiple values' do
|
|
202
|
-
|
|
203
|
-
@cab.ldelete(%w{ 2 3 })
|
|
204
|
-
@cab.lget(%w{ 0 1 2 }).should.equal({"0"=>"val0", "1"=>"val1"})
|
|
205
|
-
end
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
describe 'Rufus::Edo::Cabinet' do
|
|
210
|
-
|
|
211
|
-
it 'should copy correctly' do
|
|
212
|
-
|
|
213
|
-
cab = Rufus::Edo::Cabinet.new('tmp/spec_source.tch')
|
|
214
|
-
5000.times { |i| cab["key #{i}"] = "val #{i}" }
|
|
215
|
-
cab.size.should.equal(5000)
|
|
216
|
-
cab.copy('tmp/spec_target.tch')
|
|
217
|
-
cab.close
|
|
218
|
-
|
|
219
|
-
cab = Rufus::Edo::Cabinet.new('tmp/spec_target.tch')
|
|
220
|
-
cab.size.should.equal(5000)
|
|
221
|
-
cab['key 4999'].should.equal('val 4999')
|
|
222
|
-
cab.close
|
|
223
|
-
|
|
224
|
-
FileUtils.rm('tmp/spec_source.tch')
|
|
225
|
-
FileUtils.rm('tmp/spec_target.tch')
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
it 'should copy compactly' do
|
|
229
|
-
|
|
230
|
-
cab = Rufus::Edo::Cabinet.new('tmp/spec_source.tch')
|
|
231
|
-
100.times { |i| cab["key #{i}"] = "val #{i}" }
|
|
232
|
-
50.times { |i| cab.delete("key #{i}") }
|
|
233
|
-
cab.size.should.equal(50)
|
|
234
|
-
cab.compact_copy('tmp/spec_target.tch')
|
|
235
|
-
cab.close
|
|
236
|
-
|
|
237
|
-
cab = Rufus::Edo::Cabinet.new('tmp/spec_target.tch')
|
|
238
|
-
cab.size.should.equal(50)
|
|
239
|
-
cab['key 99'].should.equal('val 99')
|
|
240
|
-
cab.close
|
|
241
|
-
|
|
242
|
-
fs0 = File.size('tmp/spec_source.tch')
|
|
243
|
-
fs1 = File.size('tmp/spec_target.tch')
|
|
244
|
-
(fs0 > fs1).should.equal(true)
|
|
245
|
-
|
|
246
|
-
FileUtils.rm('tmp/spec_source.tch')
|
|
247
|
-
FileUtils.rm('tmp/spec_target.tch')
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
it 'should use open with a block will auto close the db correctly' do
|
|
252
|
-
|
|
253
|
-
res = Rufus::Edo::Cabinet.open('tmp/spec_source.tch') do |cab|
|
|
254
|
-
10.times { |i| cab["key #{i}"] = "val #{i}" }
|
|
255
|
-
cab.size.should.equal(10)
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
res.should.be.nil
|
|
259
|
-
|
|
260
|
-
cab = Rufus::Edo::Cabinet.new('tmp/spec_source.tch')
|
|
261
|
-
10.times do |i|
|
|
262
|
-
cab["key #{i}"].should.equal("val #{i}")
|
|
263
|
-
end
|
|
264
|
-
cab.close
|
|
265
|
-
|
|
266
|
-
FileUtils.rm('tmp/spec_source.tch')
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
it 'should use open without a block just like calling new correctly' do
|
|
271
|
-
|
|
272
|
-
cab = Rufus::Edo::Cabinet.open('tmp/spec_source.tch')
|
|
273
|
-
10.times { |i| cab["key #{i}"] = "val #{i}" }
|
|
274
|
-
cab.size.should.equal(10)
|
|
275
|
-
cab.close
|
|
276
|
-
|
|
277
|
-
cab = Rufus::Edo::Cabinet.new('tmp/spec_source.tch')
|
|
278
|
-
10.times do |i|
|
|
279
|
-
cab["key #{i}"].should.equal("val #{i}")
|
|
280
|
-
end
|
|
281
|
-
cab.close
|
|
282
|
-
|
|
283
|
-
FileUtils.rm('tmp/spec_source.tch')
|
|
284
|
-
end
|
|
285
|
-
|
|
286
|
-
it 'should honour the :type parameter' do
|
|
287
|
-
|
|
288
|
-
cab = Rufus::Edo::Cabinet.open('tmp/toto.tch')
|
|
289
|
-
cab.clear
|
|
290
|
-
cab['hello'] = 'world'
|
|
291
|
-
cab.close
|
|
292
|
-
|
|
293
|
-
cab = Rufus::Edo::Cabinet.open('tmp/toto', :type => :hash)
|
|
294
|
-
cab['hello'].should.equal('world')
|
|
295
|
-
cab.close
|
|
296
|
-
|
|
297
|
-
FileUtils.rm('tmp/toto.tch')
|
|
298
|
-
end
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
describe "Rufus::Edo::Cabinet's transactions" do
|
|
302
|
-
|
|
303
|
-
before do
|
|
304
|
-
@db = Rufus::Edo::Cabinet.new('tmp/edo_cabinet_tran_spec.tch')
|
|
305
|
-
@db.clear
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
after do
|
|
309
|
-
@db.close
|
|
310
|
-
end
|
|
311
|
-
|
|
312
|
-
it 'should correctly abort transactions' do
|
|
313
|
-
|
|
314
|
-
@db.transaction {
|
|
315
|
-
@db['pk0'] = 'alpha'
|
|
316
|
-
@db.abort
|
|
317
|
-
}
|
|
318
|
-
@db.size.should.be.zero
|
|
319
|
-
end
|
|
320
|
-
|
|
321
|
-
it 'should rollback transactions with errors' do
|
|
322
|
-
|
|
323
|
-
@db.transaction {
|
|
324
|
-
@db['pk0'] = 'alpha'
|
|
325
|
-
raise "something goes wrong"
|
|
326
|
-
}
|
|
327
|
-
@db.size.should.be.zero
|
|
328
|
-
end
|
|
329
|
-
|
|
330
|
-
it 'should commit successful transactions' do
|
|
331
|
-
|
|
332
|
-
@db.transaction do
|
|
333
|
-
@db['pk0'] = 'alpha'
|
|
334
|
-
end
|
|
335
|
-
@db['pk0'].should.equal('alpha')
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
it 'should abort low level transactions' do
|
|
339
|
-
|
|
340
|
-
@db.tranbegin
|
|
341
|
-
@db['pk0'] = 'alpha'
|
|
342
|
-
@db.tranabort
|
|
343
|
-
@db.size.should.be.zero
|
|
344
|
-
end
|
|
345
|
-
|
|
346
|
-
it 'should commit low level transactions' do
|
|
347
|
-
|
|
348
|
-
@db.tranbegin
|
|
349
|
-
@db['pk0'] = 'alpha'
|
|
350
|
-
@db.trancommit
|
|
351
|
-
@db['pk0'].should.equal('alpha')
|
|
352
|
-
end
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
describe 'Rufus::Edo::Cabinet#add{int|double}' do
|
|
356
|
-
|
|
357
|
-
before do
|
|
358
|
-
@db = Rufus::Edo::Cabinet.new('tmp/cabinet_spec.tch')
|
|
359
|
-
@db.clear
|
|
360
|
-
end
|
|
361
|
-
after do
|
|
362
|
-
@db.close
|
|
363
|
-
end
|
|
364
|
-
|
|
365
|
-
it 'should increment (int)' do
|
|
366
|
-
|
|
367
|
-
@db.addint('counter', 1).should.equal(1)
|
|
368
|
-
@db.incr('counter', 1).should.equal(2)
|
|
369
|
-
@db.addint('counter', 2).should.equal(4)
|
|
370
|
-
@db.incr('counter').should.equal(5)
|
|
371
|
-
end
|
|
372
|
-
|
|
373
|
-
it 'should fail gracefully if counter has already a [string] value (int)' do
|
|
374
|
-
|
|
375
|
-
@db['counter'] = 'a'
|
|
376
|
-
lambda { @db.addint('counter', 1) }.should.raise(Rufus::Edo::EdoError)
|
|
377
|
-
@db['counter'].should.equal('a')
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
it 'should increment (double)' do
|
|
381
|
-
|
|
382
|
-
@db.adddouble('counter', 1.0).should.equal(1.0)
|
|
383
|
-
@db.incr('counter', 1.5).should.equal(2.5)
|
|
384
|
-
@db.adddouble('counter', 2.2).should.equal(4.7)
|
|
385
|
-
end
|
|
386
|
-
|
|
387
|
-
it 'should fail gracefully if counter has already a [string] value (double)' do
|
|
388
|
-
|
|
389
|
-
@db['counter'] = 'a'
|
|
390
|
-
lambda {
|
|
391
|
-
@db.adddouble('counter', 1.0)
|
|
392
|
-
}.should.raise(Rufus::Edo::EdoError)
|
|
393
|
-
@db['counter'].should.equal('a')
|
|
394
|
-
end
|
|
395
|
-
end
|
|
396
|
-
|
|
397
|
-
describe 'Rufus::Edo::Cabinet#putkeep' do
|
|
398
|
-
before do
|
|
399
|
-
@db = Rufus::Edo::Cabinet.new('tmp/cabinet_spec.tch')
|
|
400
|
-
@db.clear
|
|
401
|
-
end
|
|
402
|
-
after do
|
|
403
|
-
@db.close
|
|
404
|
-
end
|
|
405
|
-
|
|
406
|
-
it 'should accept values' do
|
|
407
|
-
|
|
408
|
-
@db.putkeep('pillow', 'Shonagon')
|
|
409
|
-
@db.size.should.equal(1)
|
|
410
|
-
end
|
|
411
|
-
|
|
412
|
-
it 'should restitute values' do
|
|
413
|
-
|
|
414
|
-
@db.putkeep('pillow', 'Shonagon')
|
|
415
|
-
@db['pillow'].should.equal('Shonagon')
|
|
416
|
-
end
|
|
417
|
-
|
|
418
|
-
it 'should not overwrite values if already set' do
|
|
419
|
-
|
|
420
|
-
@db['pillow'] = 'Shonagon'
|
|
421
|
-
@db['pillow'].should.equal('Shonagon')
|
|
422
|
-
|
|
423
|
-
@db.putkeep('pillow', 'Ruby')
|
|
424
|
-
@db['pillow'].should.equal('Shonagon')
|
|
425
|
-
end
|
|
426
|
-
|
|
427
|
-
it 'should return true if not yet set' do
|
|
428
|
-
|
|
429
|
-
@db.putkeep('pillow', 'Shonagon').should.equal(true)
|
|
430
|
-
end
|
|
431
|
-
|
|
432
|
-
it 'should return false if already set' do
|
|
433
|
-
|
|
434
|
-
@db['pillow'] = 'Shonagon'
|
|
435
|
-
@db.putkeep('pillow', 'Ruby').should.equal(false)
|
|
436
|
-
end
|
|
437
|
-
|
|
438
|
-
it 'should accept binary data \0' do
|
|
439
|
-
|
|
440
|
-
s = "Sei#{0.chr}Shonagon"
|
|
441
|
-
|
|
442
|
-
@db.putkeep(s, s).should.be.true
|
|
443
|
-
@db[s].should.equal(s)
|
|
444
|
-
end
|
|
445
|
-
end
|
|
446
|
-
end
|
|
447
|
-
|