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,25 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
Gem::Specification.new do |s|
|
|
3
|
-
|
|
4
|
-
s.name = 'rufus-tokyo'
|
|
5
|
-
s.version = '0.1.14'
|
|
6
|
-
s.authors = [ 'John Mettraux', ]
|
|
7
|
-
s.email = 'jmettraux@gmail.com'
|
|
8
|
-
s.homepage = 'http://rufus.rubyforge.org/'
|
|
9
|
-
s.platform = Gem::Platform::RUBY
|
|
10
|
-
s.summary = 'ruby-ffi based lib to access Tokyo Cabinet and Tyrant'
|
|
11
|
-
|
|
12
|
-
s.require_path = 'lib'
|
|
13
|
-
s.test_file = 'spec/spec.rb'
|
|
14
|
-
s.has_rdoc = true
|
|
15
|
-
s.extra_rdoc_files = %w{ README.txt CHANGELOG.txt CREDITS.txt }
|
|
16
|
-
s.rubyforge_project = 'rufus'
|
|
17
|
-
|
|
18
|
-
%w{ ffi }.each do |d|
|
|
19
|
-
s.requirements << d
|
|
20
|
-
s.add_dependency(d)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
s.files = Dir['lib/**/*.rb'] + Dir['*.txt'] - [ 'lib/tokyotyrant.rb' ]
|
|
24
|
-
end
|
|
25
|
-
|
|
@@ -1,472 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
# Specifying rufus-tokyo
|
|
4
|
-
#
|
|
5
|
-
# Sun Feb 8 15:02:08 JST 2009
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
require File.dirname(__FILE__) + '/spec_base'
|
|
9
|
-
|
|
10
|
-
require 'rufus/tokyo'
|
|
11
|
-
|
|
12
|
-
FileUtils.mkdir('tmp') rescue nil
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
describe 'Rufus::Tokyo::Cabinet' do
|
|
16
|
-
|
|
17
|
-
before do
|
|
18
|
-
@db = Rufus::Tokyo::Cabinet.new('tmp/cabinet_spec.tch')
|
|
19
|
-
@db.clear
|
|
20
|
-
end
|
|
21
|
-
after do
|
|
22
|
-
@db.close
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it 'should return its path' do
|
|
26
|
-
|
|
27
|
-
@db.path.should.equal('tmp/cabinet_spec.tch')
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it 'should create its underlying file' do
|
|
31
|
-
|
|
32
|
-
File.exist?('tmp/cabinet_spec.tch').should.equal(true)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it 'should be empty initially' do
|
|
36
|
-
|
|
37
|
-
@db.size.should.equal(0)
|
|
38
|
-
@db['pillow'].should.be.nil
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it 'should accept values' do
|
|
42
|
-
|
|
43
|
-
@db['pillow'] = 'Shonagon'
|
|
44
|
-
@db.size.should.equal(1)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it 'should restitute values' do
|
|
48
|
-
|
|
49
|
-
@db['pillow'] = 'Shonagon'
|
|
50
|
-
@db['pillow'].should.equal('Shonagon')
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it 'should delete values' do
|
|
54
|
-
|
|
55
|
-
@db['pillow'] = 'Shonagon'
|
|
56
|
-
@db.delete('pillow').should.equal('Shonagon')
|
|
57
|
-
@db.size.should.equal(0)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it 'should accept and restitute \\0 strings' do
|
|
61
|
-
s = "toto#{0.chr}nada"
|
|
62
|
-
@db[s] = s
|
|
63
|
-
@db[s].should.equal(s)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it 'should reply to #keys and #values' do
|
|
67
|
-
|
|
68
|
-
keys = %w{ alpha bravo charly delta echo foxtrott }
|
|
69
|
-
keys.each_with_index { |k, i| @db[k] = i.to_s }
|
|
70
|
-
@db.keys.should.equal(keys)
|
|
71
|
-
@db.values.should.equal(%w{ 0 1 2 3 4 5 })
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it 'should reply to #keys when there are keys containing \0' do
|
|
75
|
-
|
|
76
|
-
s = "toto#{0.chr}nada"
|
|
77
|
-
@db[s] = s
|
|
78
|
-
@db.keys.should.equal([ s ])
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it 'should return a Ruby hash on merge' do
|
|
82
|
-
|
|
83
|
-
@db['a'] = 'A'
|
|
84
|
-
|
|
85
|
-
@db.merge({ 'b' => 'B', 'c' => 'C' }).should.equal(
|
|
86
|
-
{ 'a' => 'A', 'b' => 'B', 'c' => 'C' })
|
|
87
|
-
|
|
88
|
-
@db['b'].should.be.nil
|
|
89
|
-
|
|
90
|
-
@db.size.should.equal(1)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it 'should have more values in case of merge!' do
|
|
94
|
-
|
|
95
|
-
@db['a'] = 'A'
|
|
96
|
-
|
|
97
|
-
@db.merge!({ 'b' => 'B', 'c' => 'C' })
|
|
98
|
-
|
|
99
|
-
@db.size.should.equal(3)
|
|
100
|
-
@db['b'].should.equal('B')
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
describe 'Rufus::Tokyo::Cabinet #keys' do
|
|
105
|
-
|
|
106
|
-
before do
|
|
107
|
-
@n = 50
|
|
108
|
-
@db = Rufus::Tokyo::Cabinet.new('tmp/cabinet_spec.tch')
|
|
109
|
-
@db.clear
|
|
110
|
-
@n.times { |i| @db["person#{i}"] = 'whoever' }
|
|
111
|
-
@n.times { |i| @db["animal#{i}"] = 'whichever' }
|
|
112
|
-
@db["toto#{0.chr}5"] = 'toto'
|
|
113
|
-
end
|
|
114
|
-
after do
|
|
115
|
-
@db.close
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
it 'should return a Ruby Hash by default' do
|
|
119
|
-
|
|
120
|
-
@db.keys.class.should.equal(::Array)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
it 'should return a Cabinet List when :native => true' do
|
|
124
|
-
|
|
125
|
-
l = @db.keys(:native => true)
|
|
126
|
-
l.class.should.equal(Rufus::Tokyo::List)
|
|
127
|
-
l.size.should.equal(2 * @n + 1)
|
|
128
|
-
l.free
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
it 'should retrieve forward matching keys when :prefix => "prefix-"' do
|
|
132
|
-
|
|
133
|
-
@db.keys(:prefix => 'person').size.should.equal(@n)
|
|
134
|
-
|
|
135
|
-
l = @db.keys(:prefix => 'animal', :native => true)
|
|
136
|
-
l.size.should.equal(@n)
|
|
137
|
-
l.free
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
it 'should retrieve keys that contain \0' do
|
|
141
|
-
|
|
142
|
-
@db.keys.include?("toto#{0.chr}5").should.be.true
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
it 'should retrieve forward matching keys when key contains \0' do
|
|
146
|
-
|
|
147
|
-
@db.keys(:prefix => 'toto').should.equal([ "toto#{0.chr}5" ])
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
it 'should return a limited number of keys when :limit is set' do
|
|
151
|
-
|
|
152
|
-
@db.keys(:limit => 20).size.should.equal(20)
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
it 'should delete_keys_with_prefix' do
|
|
156
|
-
|
|
157
|
-
@db.delete_keys_with_prefix('animal')
|
|
158
|
-
@db.size.should.equal(@n + 1)
|
|
159
|
-
@db.keys(:prefix => 'animal').size.should.equal(0)
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
if Rufus::Tokyo::CabinetLib.respond_to?(:tcadbtranbegin)
|
|
164
|
-
#
|
|
165
|
-
# TC >= 1.4.13
|
|
166
|
-
|
|
167
|
-
describe Rufus::Tokyo::Cabinet do
|
|
168
|
-
|
|
169
|
-
before do
|
|
170
|
-
@db = Rufus::Tokyo::Cabinet.new('tmp/cabinet_spec.tch')
|
|
171
|
-
@db.clear
|
|
172
|
-
end
|
|
173
|
-
after do
|
|
174
|
-
@db.close
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
it 'should correctly abort transactions' do
|
|
178
|
-
|
|
179
|
-
@db.transaction {
|
|
180
|
-
@db['pk0'] = 'value0'
|
|
181
|
-
@db.abort
|
|
182
|
-
}
|
|
183
|
-
@db.size.should.be.zero
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
it 'should rollback transactions with errors' do
|
|
187
|
-
|
|
188
|
-
@db.transaction {
|
|
189
|
-
@db['pk0'] = 'value0'
|
|
190
|
-
raise 'something goes wrong'
|
|
191
|
-
}
|
|
192
|
-
@db.size.should.be.zero
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
it 'should commit successful transactions' do
|
|
196
|
-
|
|
197
|
-
@db.transaction do
|
|
198
|
-
@db['pk0'] = 'showanojidaietaminamishima'
|
|
199
|
-
end
|
|
200
|
-
@db['pk0'].should.equal('showanojidaietaminamishima')
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
it 'should abort low level transactions' do
|
|
204
|
-
|
|
205
|
-
@db.tranbegin
|
|
206
|
-
@db['pk0'] = 'shikataganai'
|
|
207
|
-
@db.tranabort
|
|
208
|
-
@db.size.should.be.zero
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
it 'should commit low level transactions' do
|
|
212
|
-
|
|
213
|
-
@db.tranbegin
|
|
214
|
-
@db['pk0'] = 'shikataganai'
|
|
215
|
-
@db.trancommit
|
|
216
|
-
@db['pk0'].should.equal('shikataganai')
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
describe 'Rufus::Tokyo::Cabinet' do
|
|
223
|
-
|
|
224
|
-
it 'should accept a default value' do
|
|
225
|
-
|
|
226
|
-
cab = Rufus::Tokyo::Cabinet.new(
|
|
227
|
-
'tmp/cabinet_spec_default.tch', :default => '@?!')
|
|
228
|
-
cab['a'] = 'A'
|
|
229
|
-
cab.size.should.equal(1)
|
|
230
|
-
cab['b'].should.equal('@?!')
|
|
231
|
-
cab.close
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
it 'should accept a default value (later)' do
|
|
235
|
-
|
|
236
|
-
cab = Rufus::Tokyo::Cabinet.new('tmp/cabinet_spec_default.tch')
|
|
237
|
-
cab.default = '@?!'
|
|
238
|
-
cab['a'] = 'A'
|
|
239
|
-
cab.size.should.equal(1)
|
|
240
|
-
cab['b'].should.equal('@?!')
|
|
241
|
-
cab.close
|
|
242
|
-
end
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
describe 'Rufus::Tokyo::Cabinet lget/lput/ldelete' do
|
|
246
|
-
|
|
247
|
-
before do
|
|
248
|
-
@db = Rufus::Tokyo::Cabinet.new('tmp/cabinet_spec.tch')
|
|
249
|
-
@db.clear
|
|
250
|
-
3.times { |i| @db[i.to_s] = "val#{i}" }
|
|
251
|
-
end
|
|
252
|
-
after do
|
|
253
|
-
@db.close
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
it 'should get multiple values' do
|
|
257
|
-
|
|
258
|
-
@db.lget(%w{ 0 1 2 }).should.equal({"0"=>"val0", "1"=>"val1", "2"=>"val2"})
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
it 'should put multiple values' do
|
|
262
|
-
|
|
263
|
-
@db.lput('3' => 'val3', '4' => 'val4')
|
|
264
|
-
@db.lget(%w{ 2 3 }).should.equal({"2"=>"val2", "3"=>"val3"})
|
|
265
|
-
end
|
|
266
|
-
|
|
267
|
-
it 'should delete multiple values' do
|
|
268
|
-
|
|
269
|
-
@db.ldelete(%w{ 2 3 })
|
|
270
|
-
@db.lget(%w{ 0 1 2 }).should.equal({"0"=>"val0", "1"=>"val1"})
|
|
271
|
-
end
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
describe 'Rufus::Tokyo::Cabinet' do
|
|
276
|
-
|
|
277
|
-
it 'should copy correctly' do
|
|
278
|
-
|
|
279
|
-
cab = Rufus::Tokyo::Cabinet.new('tmp/spec_source.tch')
|
|
280
|
-
5000.times { |i| cab["key #{i}"] = "val #{i}" }
|
|
281
|
-
cab.size.should.equal(5000)
|
|
282
|
-
cab.copy('tmp/spec_target.tch')
|
|
283
|
-
cab.close
|
|
284
|
-
|
|
285
|
-
cab = Rufus::Tokyo::Cabinet.new('tmp/spec_target.tch')
|
|
286
|
-
cab.size.should.equal(5000)
|
|
287
|
-
cab['key 4999'].should.equal('val 4999')
|
|
288
|
-
cab.close
|
|
289
|
-
|
|
290
|
-
FileUtils.rm('tmp/spec_source.tch')
|
|
291
|
-
FileUtils.rm('tmp/spec_target.tch')
|
|
292
|
-
end
|
|
293
|
-
|
|
294
|
-
it 'should copy compactly' do
|
|
295
|
-
|
|
296
|
-
cab = Rufus::Tokyo::Cabinet.new('tmp/spec_source.tch')
|
|
297
|
-
100.times { |i| cab["key #{i}"] = "val #{i}" }
|
|
298
|
-
50.times { |i| cab.delete("key #{i}") }
|
|
299
|
-
cab.size.should.equal(50)
|
|
300
|
-
cab.compact_copy('tmp/spec_target.tch')
|
|
301
|
-
cab.close
|
|
302
|
-
|
|
303
|
-
cab = Rufus::Tokyo::Cabinet.new('tmp/spec_target.tch')
|
|
304
|
-
cab.size.should.equal(50)
|
|
305
|
-
cab['key 99'].should.equal('val 99')
|
|
306
|
-
cab.close
|
|
307
|
-
|
|
308
|
-
fs0 = File.size('tmp/spec_source.tch')
|
|
309
|
-
fs1 = File.size('tmp/spec_target.tch')
|
|
310
|
-
(fs0 > fs1).should.equal(true)
|
|
311
|
-
|
|
312
|
-
FileUtils.rm('tmp/spec_source.tch')
|
|
313
|
-
FileUtils.rm('tmp/spec_target.tch')
|
|
314
|
-
end
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
it 'should use open with a block will auto close the db correctly' do
|
|
318
|
-
|
|
319
|
-
res = Rufus::Tokyo::Cabinet.open('tmp/spec_source.tch') do |cab|
|
|
320
|
-
10.times { |i| cab["key #{i}"] = "val #{i}" }
|
|
321
|
-
cab.size.should.equal(10)
|
|
322
|
-
end
|
|
323
|
-
|
|
324
|
-
res.should.be.nil
|
|
325
|
-
|
|
326
|
-
cab = Rufus::Tokyo::Cabinet.new('tmp/spec_source.tch')
|
|
327
|
-
10.times do |i|
|
|
328
|
-
cab["key #{i}"].should.equal("val #{i}")
|
|
329
|
-
end
|
|
330
|
-
cab.close
|
|
331
|
-
|
|
332
|
-
FileUtils.rm('tmp/spec_source.tch')
|
|
333
|
-
end
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
it 'should use open without a block just like calling new correctly' do
|
|
337
|
-
|
|
338
|
-
cab = Rufus::Tokyo::Cabinet.open('tmp/spec_source.tch')
|
|
339
|
-
10.times { |i| cab["key #{i}"] = "val #{i}" }
|
|
340
|
-
cab.size.should.equal(10)
|
|
341
|
-
cab.close
|
|
342
|
-
|
|
343
|
-
cab = Rufus::Tokyo::Cabinet.new('tmp/spec_source.tch')
|
|
344
|
-
10.times do |i|
|
|
345
|
-
cab["key #{i}"].should.equal("val #{i}")
|
|
346
|
-
end
|
|
347
|
-
cab.close
|
|
348
|
-
|
|
349
|
-
FileUtils.rm('tmp/spec_source.tch')
|
|
350
|
-
end
|
|
351
|
-
|
|
352
|
-
it 'should honour the :type parameter' do
|
|
353
|
-
|
|
354
|
-
cab = Rufus::Tokyo::Cabinet.open('tmp/toto.tch')
|
|
355
|
-
cab.clear
|
|
356
|
-
cab['hello'] = 'world'
|
|
357
|
-
cab.close
|
|
358
|
-
|
|
359
|
-
cab = Rufus::Tokyo::Cabinet.open('tmp/toto', :type => :hash)
|
|
360
|
-
cab['hello'].should.equal('world')
|
|
361
|
-
cab.close
|
|
362
|
-
|
|
363
|
-
FileUtils.rm('tmp/toto.tch')
|
|
364
|
-
end
|
|
365
|
-
|
|
366
|
-
it 'should respond to defrag (or not) (TC >= 1.4.21)' do
|
|
367
|
-
|
|
368
|
-
cab = Rufus::Tokyo::Cabinet.open('tmp/toto.tch')
|
|
369
|
-
|
|
370
|
-
if Rufus::Tokyo::CabinetLib.respond_to?(:tctdbsetdfunit)
|
|
371
|
-
cab.defrag
|
|
372
|
-
true.should.equal(true)
|
|
373
|
-
else
|
|
374
|
-
lambda() { cab.defrag }.should.raise(NotImplementedError)
|
|
375
|
-
end
|
|
376
|
-
|
|
377
|
-
cab.close
|
|
378
|
-
end
|
|
379
|
-
end
|
|
380
|
-
|
|
381
|
-
describe 'Rufus::Tokyo::Cabinet#add{int|double}' do
|
|
382
|
-
|
|
383
|
-
before do
|
|
384
|
-
@db = Rufus::Tokyo::Cabinet.new('tmp/cabinet_spec.tch')
|
|
385
|
-
@db.clear
|
|
386
|
-
end
|
|
387
|
-
after do
|
|
388
|
-
@db.close
|
|
389
|
-
end
|
|
390
|
-
|
|
391
|
-
it 'should increment (int)' do
|
|
392
|
-
|
|
393
|
-
@db.addint('counter', 1).should.equal(1)
|
|
394
|
-
@db.incr('counter', 1).should.equal(2)
|
|
395
|
-
@db.addint('counter', 2).should.equal(4)
|
|
396
|
-
@db.incr('counter').should.equal(5)
|
|
397
|
-
end
|
|
398
|
-
|
|
399
|
-
it 'should fail gracefully if counter has already a [string] value (int)' do
|
|
400
|
-
|
|
401
|
-
@db['counter'] = 'a'
|
|
402
|
-
lambda { @db.addint('counter', 1) }.should.raise(Rufus::Tokyo::TokyoError)
|
|
403
|
-
@db['counter'].should.equal('a')
|
|
404
|
-
end
|
|
405
|
-
|
|
406
|
-
it 'should increment (double)' do
|
|
407
|
-
|
|
408
|
-
@db.adddouble('counter', 1.0).should.equal(1.0)
|
|
409
|
-
@db.incr('counter', 1.5).should.equal(2.5)
|
|
410
|
-
@db.adddouble('counter', 2.2).should.equal(4.7)
|
|
411
|
-
end
|
|
412
|
-
|
|
413
|
-
it 'should fail gracefully if counter has already a [string] value (double)' do
|
|
414
|
-
|
|
415
|
-
@db['counter'] = 'a'
|
|
416
|
-
lambda {
|
|
417
|
-
@db.adddouble('counter', 1.0)
|
|
418
|
-
}.should.raise(Rufus::Tokyo::TokyoError)
|
|
419
|
-
@db['counter'].should.equal('a')
|
|
420
|
-
end
|
|
421
|
-
end
|
|
422
|
-
|
|
423
|
-
describe 'Rufus::Tokyo::Cabinet#putkeep' do
|
|
424
|
-
before do
|
|
425
|
-
@db = Rufus::Tokyo::Cabinet.new('tmp/cabinet_spec.tch')
|
|
426
|
-
@db.clear
|
|
427
|
-
end
|
|
428
|
-
after do
|
|
429
|
-
@db.close
|
|
430
|
-
end
|
|
431
|
-
|
|
432
|
-
it 'should accept values' do
|
|
433
|
-
|
|
434
|
-
@db.putkeep('pillow', 'Shonagon')
|
|
435
|
-
@db.size.should.equal(1)
|
|
436
|
-
end
|
|
437
|
-
|
|
438
|
-
it 'should restitute values' do
|
|
439
|
-
|
|
440
|
-
@db.putkeep('pillow', 'Shonagon')
|
|
441
|
-
@db['pillow'].should.equal('Shonagon')
|
|
442
|
-
end
|
|
443
|
-
|
|
444
|
-
it 'should not overwrite values if already set' do
|
|
445
|
-
|
|
446
|
-
@db['pillow'] = 'Shonagon'
|
|
447
|
-
@db['pillow'].should.equal('Shonagon')
|
|
448
|
-
|
|
449
|
-
@db.putkeep('pillow', 'Ruby')
|
|
450
|
-
@db['pillow'].should.equal('Shonagon')
|
|
451
|
-
end
|
|
452
|
-
|
|
453
|
-
it 'should return true if not yet set' do
|
|
454
|
-
|
|
455
|
-
@db.putkeep('pillow', 'Shonagon').should.equal(true)
|
|
456
|
-
end
|
|
457
|
-
|
|
458
|
-
it 'should return false if already set' do
|
|
459
|
-
|
|
460
|
-
@db['pillow'] = 'Shonagon'
|
|
461
|
-
@db.putkeep('pillow', 'Ruby').should.equal(false)
|
|
462
|
-
end
|
|
463
|
-
|
|
464
|
-
it 'should accept binary data \0' do
|
|
465
|
-
|
|
466
|
-
s = "Sei#{0.chr}Shonagon"
|
|
467
|
-
|
|
468
|
-
@db.putkeep(s, s).should.be.true
|
|
469
|
-
@db[s].should.equal(s)
|
|
470
|
-
end
|
|
471
|
-
end
|
|
472
|
-
|