metry 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. data/History.txt +6 -0
  2. data/Manifest.txt +14 -69
  3. data/TODO +2 -3
  4. data/cucumber.yml +1 -0
  5. data/example/example.rb +1 -1
  6. data/features/psycho/dashboard.feature +17 -0
  7. data/features/psycho/goals.feature +24 -0
  8. data/features/psycho/visitor_tracking.feature +32 -0
  9. data/features/step_definitions/goals.rb +3 -0
  10. data/features/step_definitions/tracking.rb +1 -1
  11. data/features/step_definitions/web.rb +14 -2
  12. data/features/support/env.rb +4 -0
  13. data/lib/metry.rb +4 -6
  14. data/lib/metry/experiment.rb +6 -8
  15. data/lib/metry/psycho.rb +112 -0
  16. data/lib/metry/psycho/dashboard.erb +14 -0
  17. data/lib/metry/psycho/layout.erb +8 -0
  18. data/lib/metry/psycho/new_goal.erb +9 -0
  19. data/lib/metry/psycho/visitor.erb +7 -0
  20. data/lib/metry/rack/tracking.rb +17 -13
  21. data/lib/metry/storage.rb +116 -0
  22. data/radiant/example/features/metry.feature +8 -8
  23. data/radiant/example/features/psycho.feature +13 -0
  24. data/radiant/example/features/step_definitions/experiments.rb +2 -2
  25. data/radiant/example/features/step_definitions/tracking.rb +1 -1
  26. data/radiant/example/features/support/env.rb +3 -0
  27. data/radiant/extension/lib/metry_authenticator.rb +30 -0
  28. data/radiant/extension/lib/metry_tags.rb +2 -1
  29. data/radiant/extension/metry_extension.rb +1 -1
  30. data/test/{test_tokyo.rb → test_storage.rb} +3 -3
  31. metadata +17 -72
  32. data/lib/metry/memory.rb +0 -27
  33. data/lib/metry/tokyo.rb +0 -181
  34. data/vendor/rufus-tokyo/CHANGELOG.txt +0 -112
  35. data/vendor/rufus-tokyo/CREDITS.txt +0 -27
  36. data/vendor/rufus-tokyo/LICENSE.txt +0 -21
  37. data/vendor/rufus-tokyo/README.txt +0 -310
  38. data/vendor/rufus-tokyo/Rakefile +0 -118
  39. data/vendor/rufus-tokyo/TODO.txt +0 -25
  40. data/vendor/rufus-tokyo/doc/decision_table.numbers +0 -0
  41. data/vendor/rufus-tokyo/doc/rdoc-style.css +0 -320
  42. data/vendor/rufus-tokyo/lib/rufus-edo.rb +0 -3
  43. data/vendor/rufus-tokyo/lib/rufus-tokyo.rb +0 -3
  44. data/vendor/rufus-tokyo/lib/rufus/edo.rb +0 -39
  45. data/vendor/rufus-tokyo/lib/rufus/edo/README.txt +0 -106
  46. data/vendor/rufus-tokyo/lib/rufus/edo/cabcore.rb +0 -333
  47. data/vendor/rufus-tokyo/lib/rufus/edo/cabinet/abstract.rb +0 -219
  48. data/vendor/rufus-tokyo/lib/rufus/edo/cabinet/table.rb +0 -159
  49. data/vendor/rufus-tokyo/lib/rufus/edo/error.rb +0 -36
  50. data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant.rb +0 -4
  51. data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant/abstract.rb +0 -137
  52. data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant/table.rb +0 -141
  53. data/vendor/rufus-tokyo/lib/rufus/edo/tabcore.rb +0 -567
  54. data/vendor/rufus-tokyo/lib/rufus/tokyo.rb +0 -58
  55. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/abstract.rb +0 -568
  56. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/lib.rb +0 -230
  57. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/table.rb +0 -753
  58. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/util.rb +0 -425
  59. data/vendor/rufus-tokyo/lib/rufus/tokyo/config.rb +0 -161
  60. data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia.rb +0 -43
  61. data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia/lib.rb +0 -65
  62. data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia/words.rb +0 -71
  63. data/vendor/rufus-tokyo/lib/rufus/tokyo/hmethods.rb +0 -111
  64. data/vendor/rufus-tokyo/lib/rufus/tokyo/query.rb +0 -102
  65. data/vendor/rufus-tokyo/lib/rufus/tokyo/transactions.rb +0 -74
  66. data/vendor/rufus-tokyo/lib/rufus/tokyo/ttcommons.rb +0 -59
  67. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant.rb +0 -35
  68. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/abstract.rb +0 -146
  69. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/lib.rb +0 -153
  70. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/table.rb +0 -162
  71. data/vendor/rufus-tokyo/rufus-tokyo.gemspec +0 -25
  72. data/vendor/rufus-tokyo/spec/cabinet_spec.rb +0 -472
  73. data/vendor/rufus-tokyo/spec/cabinetconfig_spec.rb +0 -82
  74. data/vendor/rufus-tokyo/spec/edo_cabinet_spec.rb +0 -447
  75. data/vendor/rufus-tokyo/spec/edo_ntyrant_spec.rb +0 -299
  76. data/vendor/rufus-tokyo/spec/edo_ntyrant_table_spec.rb +0 -462
  77. data/vendor/rufus-tokyo/spec/edo_table_spec.rb +0 -560
  78. data/vendor/rufus-tokyo/spec/hmethods_spec.rb +0 -44
  79. data/vendor/rufus-tokyo/spec/incr.lua +0 -20
  80. data/vendor/rufus-tokyo/spec/spec.rb +0 -9
  81. data/vendor/rufus-tokyo/spec/spec_base.rb +0 -23
  82. data/vendor/rufus-tokyo/spec/start_tyrants.sh +0 -26
  83. data/vendor/rufus-tokyo/spec/stop_tyrants.sh +0 -9
  84. data/vendor/rufus-tokyo/spec/table_spec.rb +0 -567
  85. data/vendor/rufus-tokyo/spec/tyrant_spec.rb +0 -309
  86. data/vendor/rufus-tokyo/spec/tyrant_table_spec.rb +0 -479
  87. data/vendor/rufus-tokyo/spec/util_list_spec.rb +0 -200
  88. data/vendor/rufus-tokyo/spec/util_map_spec.rb +0 -132
  89. data/vendor/rufus-tokyo/tasks/dev.rb +0 -70
  90. data/vendor/rufus-tokyo/test/bm0.rb +0 -353
  91. data/vendor/rufus-tokyo/test/bm1_compression.rb +0 -54
  92. data/vendor/rufus-tokyo/test/con0.rb +0 -30
  93. data/vendor/rufus-tokyo/test/mem.rb +0 -49
  94. data/vendor/rufus-tokyo/test/mem1.rb +0 -44
  95. data/vendor/rufus-tokyo/test/readme0.rb +0 -17
  96. data/vendor/rufus-tokyo/test/readme1.rb +0 -21
  97. data/vendor/rufus-tokyo/test/readme2.rb +0 -15
  98. data/vendor/rufus-tokyo/test/readme3.rb +0 -24
  99. data/vendor/rufus-tokyo/test/readmes_test.sh +0 -17
@@ -1,200 +0,0 @@
1
-
2
- #
3
- # Specifying rufus-tokyo
4
- #
5
- # Tue Jan 27 16:30:34 JST 2009
6
- #
7
-
8
- require File.dirname(__FILE__) + '/spec_base'
9
-
10
- require 'rufus/tokyo'
11
-
12
-
13
- describe 'Rufus::Tokyo::List' do
14
-
15
- before do
16
- @l = Rufus::Tokyo::List.new
17
- end
18
- after do
19
- @l.free
20
- end
21
-
22
- it 'should be empty initially' do
23
- @l.size.should.be.zero
24
- end
25
-
26
- it 'should respond to <<' do
27
- l = @l << 'a'
28
- @l.size.should.equal(1)
29
- l.should.equal(@l)
30
- end
31
-
32
- it 'should respond to push' do
33
- l = @l.push('a')
34
- @l.size.should.equal(1)
35
- l.should.equal(@l)
36
- end
37
-
38
- it 'should respond to push with multiple arguments' do
39
- @l.push('a', 'b', 'c')
40
- @l.size.should.equal(3)
41
- end
42
-
43
- it 'should respond to pop' do
44
- @l.pop.should.be.nil
45
- end
46
-
47
- it 'should respond to shift' do
48
- @l.shift.should.be.nil
49
- end
50
-
51
- it 'should accept strings with \\0' do
52
- s = "tokyo#{0.chr}cabinet"
53
- @l << s
54
- @l.pop.should.equal(s)
55
- end
56
-
57
- it 'should iterate over values with \\0' do
58
- @l << 'ab' << "c#{0.chr}d" << 'ef'
59
- s = @l.inject('') { |s, e| s << e }
60
- s.should.equal("abc#{0.chr}def")
61
- end
62
-
63
- it 'should pop values with \\0' do
64
- s = "shinbashi#{0.chr}closet"
65
- @l << s
66
- @l.pop.should.equal(s)
67
- end
68
-
69
- it 'should shift values with \\0' do
70
- s = "shinbashi#{0.chr}closet"
71
- @l << s
72
- @l.shift.should.equal(s)
73
- end
74
-
75
- it 'should unshift values with \\0' do
76
- s = "shinbashi#{0.chr}closet"
77
- @l.unshift(s)
78
- @l[0].should.equal(s)
79
- end
80
-
81
- it 'should remove values with \\0' do
82
- s = "shinbashi#{0.chr}closet"
83
- @l << s
84
- @l.delete_at(0).should.equal(s)
85
- end
86
-
87
- it 'should overwrite values with \\0' do
88
- s0 = "shinbashi#{0.chr}closet"
89
- s1 = "sugamo#{0.chr}drawer"
90
- @l << s0
91
- @l[0] = s1
92
- @l[0].should.equal(s1)
93
- end
94
-
95
- #it 'should delete [multiple] values' do
96
- # %w[ a b a c a ].each { |e| @l << e }
97
- # @l.delete('a')
98
- # @l.to_a.should.equal(%w[ b c ])
99
- #end
100
- #it 'should return the deleted value' do
101
- # %w[ a b a c a ].each { |e| @l << e }
102
- # @l.delete('d').should.be.nil
103
- #end
104
- #it 'should return the value of the default block when deleting a missing elt' do
105
- # %w[ a b a c a ].each { |e| @l << e }
106
- # @l.delete('d') { 'nada' }.should.equal('nada')
107
- #end
108
-
109
- unless defined?(JRUBY_VERSION)
110
- it 'should not accept non-string values' do
111
- lambda {
112
- @l << 2
113
- }.should.raise(ArgumentError)
114
- end
115
- end
116
-
117
- end
118
-
119
- describe 'Rufus::Tokyo::List' do
120
-
121
- it 'should close itself and return its ruby version upon #release' do
122
-
123
- l = Rufus::Tokyo::List.new << 'a' << 'b' << 'c'
124
- l.release.should.equal(%w{ a b c })
125
- l.instance_variable_get(:@list).should.be.nil
126
- end
127
-
128
- it 'can be created from a Ruby Array' do
129
-
130
- l = Rufus::Tokyo::List.new(%w{ a b c })
131
- l.pointer.is_a?(FFI::Pointer).should.be.true
132
- end
133
- end
134
-
135
- describe 'Rufus::Tokyo::List' do
136
-
137
- before do
138
- @l = Rufus::Tokyo::List.new
139
- @l << 'a' << 'b' << 'c' << 'd'
140
- end
141
- after do
142
- @l.free
143
- end
144
-
145
- it 'should respond to pop' do
146
- @l.pop.should.equal('d')
147
- @l.size.should.equal(3)
148
- end
149
-
150
- it 'should respond to shift' do
151
- @l.shift.should.equal('a')
152
- @l.size.should.equal(3)
153
- end
154
-
155
- it 'should respond to unshift' do
156
- @l.unshift('z')
157
- @l.size.should.equal(5)
158
- end
159
-
160
- it 'should slice correctly' do
161
- @l[1].should.equal('b')
162
- @l[-1].should.equal('d')
163
- @l[0, 2].should.equal(%w{ a b })
164
- @l[0..-1].should.equal(%w{ a b c d })
165
- @l[0..1].should.equal(%w{ a b })
166
- @l[0, -1].should.be.nil
167
- end
168
- end
169
-
170
- describe 'Rufus::Tokyo::List' do
171
-
172
- before do
173
- @l = Rufus::Tokyo::List.new
174
- @l.push(*%w{ - - - - e })
175
- end
176
- after do
177
- @l.free
178
- end
179
-
180
- it 'should overwrite slices (0)' do
181
- @l[0, 3] = %w{ a b c }
182
- @l.to_a.should.equal(%w{ a b c - e })
183
- end
184
-
185
- it 'should overwrite slices (1)' do
186
- @l[1..2] = %w{ a b }
187
- @l.to_a.should.equal(%w{ - a b - e })
188
- end
189
-
190
- it 'should overwrite slices (2)' do
191
- @l[0, 2] = '?'
192
- @l.to_a.should.equal(%w{ ? - - e })
193
- end
194
-
195
- it 'should overwrite slices (3)' do
196
- @l[0..2] = '?'
197
- @l.to_a.should.equal(%w{ ? - e })
198
- end
199
- end
200
-
@@ -1,132 +0,0 @@
1
-
2
- #
3
- # Specifying rufus-tokyo
4
- #
5
- # Mon Jan 26 15:10:03 JST 2009
6
- #
7
-
8
- require File.dirname(__FILE__) + '/spec_base'
9
-
10
- require 'rufus/tokyo'
11
-
12
-
13
- describe 'Rufus::Tokyo::Map' do
14
-
15
- before do
16
- @m = Rufus::Tokyo::Map.new
17
- end
18
- after do
19
- @m.free
20
- end
21
-
22
- it 'should be empty initially' do
23
- @m.size.should.be.zero
24
- end
25
-
26
- it 'should respond to #size and #length' do
27
- @m.size.should.be.zero
28
- @m.length.should.be.zero
29
- end
30
-
31
- it 'should return nil when there is no value for a key' do
32
- @m['missing'].should.be.nil
33
- end
34
-
35
- it 'should accept input' do
36
- @m['a'] = 'b'
37
- @m.size.should.equal(1)
38
- end
39
-
40
- it 'should fetch values' do
41
- @m['a'] = 'b'
42
- @m['a'].should.equal('b')
43
- end
44
-
45
- it 'should accept and restitute strings with \\0' do
46
- s = "shinjuku#{0.chr}jiken"
47
- @m[s] = s
48
- @m[s].should.equal(s)
49
- end
50
-
51
- it 'should delete value with \\0' do
52
- s = "shinjuku#{0.chr}jiken"
53
- @m[s] = s
54
- @m.delete(s).should.equal(s)
55
- end
56
-
57
- it 'should iterate over values with \\0' do
58
- s = "oumya#{0.chr}box"
59
- (1..4).inject(@m) { |m, i| m["#{s}_k#{i}"] = "#{s}_v#{i}"; m }
60
- a = @m.inject([]) { |a, (k, v)| a << k << v; a }
61
- a.each { |e| e.should.match(/^oumya.box_[kv]/) }
62
- end
63
-
64
- unless defined?(JRUBY_VERSION)
65
- it 'should raise an ArgumentError on non-string input' do
66
- lambda {
67
- @m[1] = 2
68
- }.should.raise(ArgumentError)
69
- lambda {
70
- @m['a'] = 2
71
- }.should.raise(ArgumentError)
72
- lambda {
73
- @m[1] = 'b'
74
- }.should.raise(ArgumentError)
75
- end
76
- end
77
- end
78
-
79
- describe 'Rufus::Tokyo::Map class, like the Ruby Hash class,' do
80
-
81
- it 'should respond to #[]' do
82
- m = Rufus::Tokyo::Map[ 'a' => 'b' ]
83
- m.class.should.equal(Rufus::Tokyo::Map)
84
- m['a'].should.equal('b')
85
- m.free
86
- end
87
- end
88
-
89
- describe 'Rufus::Tokyo::Map, like a Ruby Hash,' do
90
-
91
- before do
92
- @m = Rufus::Tokyo::Map[%w{ a A b B c C }]
93
- end
94
- after do
95
- @m.free
96
- end
97
-
98
- it 'should list keys' do
99
- @m.keys.should.equal(%w{ a b c })
100
- end
101
-
102
- it 'should list values' do
103
- @m.values.should.equal(%w{ A B C })
104
- end
105
-
106
- it 'should respond to merge (and return a Hash)' do
107
- h = @m.merge('d' => 'D')
108
- h.should.equal(::Hash[*%w{ a A b B c C d D }])
109
- @m.size.should.equal(3)
110
- end
111
-
112
- it 'should respond to merge! (and return self)' do
113
- r = @m.merge!('d' => 'D')
114
- @m.size.should.equal(4)
115
- r.should.equal(@m)
116
- end
117
- end
118
-
119
- describe 'Rufus::Tokyo::Map, as an Enumerable,' do
120
-
121
- before do
122
- @m = Rufus::Tokyo::Map[%w{ a A b B c C }]
123
- end
124
- after do
125
- @m.free
126
- end
127
-
128
- it 'should respond to collect' do
129
- @m.inject('') { |s, (k, v)| s << "#{k}#{v}" }.should.equal('aAbBcC')
130
- end
131
- end
132
-
@@ -1,70 +0,0 @@
1
- desc "tasks for handling extension libraries"
2
- namespace :ext do
3
-
4
- def git_repo
5
- {
6
- :cabinet => "git://github.com/etrepum/tokyo-cabinet.git",
7
- :tyrant => "git://github.com/etrepum/tokyo-tyrant.git"
8
- }
9
- end
10
-
11
- def extensions
12
- [:cabinet, :tyrant]
13
- end
14
-
15
- def ext_root_path
16
- File.expand_path(File.join(File.dirname(__FILE__), '..', 'ext'))
17
- end
18
-
19
- def ext_local_of type
20
- File.join(ext_root_path, "tokyo-#{type}")
21
- end
22
-
23
- desc "creates the extensions build directory"
24
- task :create do
25
- mkdir_p ext_root_path
26
- end
27
-
28
- desc "removes the extensions build directory"
29
- task :remove do
30
- rm_rf ext_root_path
31
- end
32
-
33
- desc "builds the extensions, takes PREFIX for where to install"
34
- task :build => [:create] do
35
- extensions.each do |ext|
36
- sh "cd #{ext_local_of ext} &&
37
- ./configure --prefix=#{ENV['PREFIX'] || '/usr/local'} &&
38
- make"
39
- end
40
- end
41
-
42
- desc "installs the extensions [REQUIRES SUDO AND BUILD_ALL]"
43
- task :install do
44
- extensions.each do |ext|
45
- sh "cd #{ext_local_of ext} && sudo make install"
46
- end
47
- end
48
-
49
- desc "clones/pulls and builds all extensions, takes PREFIX for where to install"
50
- task :build_all => [:create] + extensions + [:build]
51
-
52
- desc "builds and installs all the extensions"
53
- task :install_all => [:build_all, :install]
54
-
55
- desc "update all the extensions"
56
- task :update_all => extensions
57
-
58
- extensions.each do |ext|
59
- desc "clones and/or updates the etrepum/tokyo-#{ext} repo"
60
- task ext => [:create] do
61
- repo = ext_local_of ext
62
- if ! File.directory?(repo)
63
- sh "cd #{ext_root_path} && git clone #{git_repo[ext]}"
64
- else
65
- sh "cd #{repo} && git checkout master && git pull"
66
- end
67
- end
68
- end
69
-
70
- end
@@ -1,353 +0,0 @@
1
-
2
- #
3
- # a bit of benchmarking
4
- #
5
- # some gists of runs :
6
- #
7
- # http://gist.github.com/60709
8
- #
9
-
10
- $:.unshift('lib')
11
-
12
- require 'benchmark'
13
-
14
- require 'date'
15
- require 'fileutils'
16
-
17
- require 'rubygems'
18
-
19
-
20
- # Are the 'native'/'author' ruby bindings present ?
21
-
22
- puts
23
-
24
- begin
25
- require 'tokyocabinet'
26
- rescue LoadError
27
- puts "Tokyo Cabinet 'native' ruby bindings not present"
28
- end
29
-
30
- begin
31
- require 'tokyotyrant'
32
- rescue LoadError
33
- puts "Tokyo Tyrant 'native' ruby bindings not present"
34
- end
35
-
36
- begin
37
- require 'memcache'
38
- rescue LoadError
39
- puts "\ngem memcache-client not present"
40
- end
41
-
42
- # moving on...
43
-
44
- N = 10_000
45
-
46
- puts
47
- puts Time.now.to_s
48
- puts "N is #{N}"
49
- puts "ruby is #{RUBY_VERSION}"
50
-
51
- # ==============================================================================
52
- # bench methods
53
- # ==============================================================================
54
-
55
- #
56
- # note : pre db.clear and post db.close are included.
57
- #
58
- def rufus_cabinet_bench (bench_title, db)
59
-
60
- db.clear
61
-
62
- 2.times { puts }
63
- puts bench_title
64
-
65
- Benchmark.benchmark(' ' * 31 + Benchmark::Tms::CAPTION, 31) do |b|
66
-
67
- b.report('inserting one') do
68
- db['a'] = 'A'
69
- end
70
- b.report('inserting N') do
71
- N.times { |i| db["key #{i}"] = "value #{i}" }
72
- end
73
- b.report('finding all keys') do
74
- db.keys
75
- end
76
-
77
- unless db.class.name.match(/^Rufus::Edo::/)
78
- b.report('finding all keys (native)') do
79
- db.keys(:native => true).free
80
- end
81
- end
82
-
83
- b.report('finding all keys (pref)') do
84
- db.keys(:prefix => 'key ')
85
- end
86
- b.report('finding all keys (r pref)') do
87
- db.keys.select { |k| k[0, 4] == 'key ' }
88
- end
89
- b.report('finding all') do
90
- db.values
91
- end
92
- b.report('iterate all') do
93
- db.each { |k, v| }
94
- end
95
- b.report('find first') do
96
- db["key #{0}"]
97
- end
98
- b.report('delete first') do
99
- db.delete("key #{0}")
100
- end
101
-
102
- txt = 'delete_keys_with_prefix "1"'
103
- txt += ' (M)' if db.class.name == 'Rufus::Edo::Cabinet'
104
- b.report(txt) do
105
- db.delete_keys_with_prefix('key 1')
106
- end
107
-
108
- b.report('del keys with prefix "2" (m)') do
109
- ks = db.keys(:prefix => 'key 2')
110
- ks.each { |k| db.delete(k) }
111
- end
112
- end
113
-
114
- db.close
115
- end
116
-
117
- # = table ==
118
-
119
- puts "\npreparing fake data for table tests..."
120
-
121
- require 'faker'
122
-
123
- DATA = (0..N - 1).collect { |i|
124
- {
125
- 'name' => Faker::Name.name,
126
- 'sex' => (i % 2) ? 'male' : 'female',
127
- 'birthday' => DateTime.new(1972, 10, 14),
128
- 'divisions' => (i % 2) ? 'brd' : 'dev'
129
- }
130
- }
131
-
132
- DATA1 = DATA.collect { |e|
133
- h = e.dup
134
- h['birthday'] = h['birthday'].to_s
135
- h
136
- }
137
- # Tokyo Cabinet tables only do strings
138
-
139
-
140
- # = memcache ===
141
-
142
- #
143
- # tiny test for memcache_client gem
144
- #
145
- # note : space is an illegal char in keys here !
146
- #
147
- def limited_bench (bench_title, db)
148
-
149
- 2.times { puts }
150
- puts bench_title
151
-
152
- Benchmark.benchmark(' ' * 31 + Benchmark::Tms::CAPTION, 31) do |b|
153
-
154
- b.report('inserting one') do
155
- db['a'] = 'A'
156
- end
157
- b.report('inserting N') do
158
- N.times { |i| db["key#{i}"] = "value #{i}" }
159
- end
160
- b.report('find first') do
161
- db["key#{0}"]
162
- end
163
- b.report('delete first') do
164
- db.delete("key#{0}")
165
- end
166
- end
167
- end
168
-
169
-
170
- #
171
- # note : pre db.clear and post db.close are included.
172
- #
173
- def rufus_table_bench (bench_title, db)
174
-
175
- 2.times { puts }
176
- puts bench_title
177
-
178
- Benchmark.benchmark(' ' * 31 + Benchmark::Tms::CAPTION, 31) do |b|
179
-
180
- db.clear
181
-
182
- db.clear
183
- db.set_index('name', :lexical)
184
-
185
- b.report('inserting data (index set)') do
186
- DATA1.each_with_index { |e, i| db["key #{i.to_s}"] = e }
187
- end
188
-
189
- db.clear
190
- db.set_index('name', :remove)
191
-
192
- b.report('inserting data (no index)') do
193
- DATA1.each_with_index { |e, i| db["key #{i.to_s}"] = e }
194
- end
195
-
196
- b.report('finding all keys') do
197
- db.keys
198
- end
199
- b.report('finding all keys (pref)') do
200
- db.keys(:prefix => 'key ')
201
- end
202
- b.report('finding all keys (r pref)') do
203
- db.keys.select { |k| k[0, 4] == 'key ' }
204
- end
205
- b.report('finding all') do
206
- db.query { |q| }
207
- end
208
- b.report('find last') do
209
- db["key #{DATA.size.to_s}"]
210
- end
211
- b.report('delete last') do
212
- db.delete("key #{DATA.size.to_s}")
213
- end
214
- b.report('find Alphonse') do
215
- db.query { |q| q.add('name', :equals, DATA1[0]['name']) }
216
- end
217
-
218
- b.report("setting index (#{DATA.size} rows)") do
219
- db.set_index('name', :lexical)
220
- end
221
-
222
- b.report('find Alphonse (index set)') do
223
- db.query { |q| q.add('name', :equals, DATA1[0]['name']) }
224
- end
225
-
226
- b.report('delete_keys_with_prefix "1"') do
227
- db.delete_keys_with_prefix('key 1')
228
- end
229
- #b.report('del keys with prefix "2" (m)') do
230
- # ks = db.keys(:prefix => 'key 2')
231
- # ks.each { |k| db.delete(k) }
232
- #end
233
- end
234
-
235
- db.close
236
- end
237
-
238
- # ==============================================================================
239
- # hashes
240
- # ==============================================================================
241
-
242
- #
243
- # Tokyo Cabinet ===============================================================
244
- #
245
-
246
- require 'rufus/tokyo'
247
-
248
- FileUtils.rm_f('tmp/test.tch')
249
-
250
- rufus_cabinet_bench('TC', Rufus::Tokyo::Cabinet.new('tmp/test.tch'))
251
-
252
- #
253
- # 'native' ruby bindings
254
- #
255
-
256
- FileUtils.rm_f('tmp/test.tch')
257
-
258
- if defined?(TokyoCabinet)
259
-
260
- require 'rufus/edo'
261
-
262
- rufus_cabinet_bench('Edo TC', Rufus::Edo::Cabinet.new('tmp/test.tch'))
263
- end
264
-
265
-
266
- #
267
- # Tokyo Tyrant ================================================================
268
- #
269
-
270
- require 'rufus/tokyo/tyrant'
271
-
272
- rufus_cabinet_bench('TT', Rufus::Tokyo::Tyrant.new('127.0.0.1', 45000))
273
-
274
-
275
- #
276
- # 'native' Tokyo Tyrant ========================================================
277
- #
278
-
279
- if defined?(TokyoTyrant)
280
-
281
- require 'rufus/edo/ntyrant'
282
-
283
- rufus_cabinet_bench('net TT', Rufus::Edo::NetTyrant.new('127.0.0.1', 45000))
284
- end
285
-
286
-
287
- if defined?(MemCache)
288
-
289
- db = MemCache.new(
290
- :compression => false,
291
- :readonly => false,
292
- :debug => false)
293
- db.servers = [ '127.0.0.1:45000' ]
294
-
295
- limited_bench('TT over memcache-client', db)
296
-
297
- db = MemCache.new(
298
- :compression => true,
299
- :readonly => false,
300
- :debug => false)
301
- db.servers = [ '127.0.0.1:45000' ]
302
-
303
- limited_bench('TT over memcache-client (:compression => true)', db)
304
- end
305
-
306
-
307
- # ==============================================================================
308
- # tables
309
- # ==============================================================================
310
-
311
- #
312
- # Tokyo Cabinet table =========================================================
313
- #
314
-
315
- FileUtils.rm_f('tmp/test.tct')
316
-
317
- rufus_table_bench('TC table', Rufus::Tokyo::Table.new('tmp/test.tct'))
318
-
319
-
320
- #
321
- # 'native' Tokyo Cabinet table =================================================
322
- #
323
-
324
- FileUtils.rm_f('tmp/test.tct')
325
-
326
-
327
- if defined?(TokyoCabinet)
328
-
329
- require 'rufus/edo'
330
-
331
- rufus_table_bench('Edo TC table', Rufus::Edo::Table.new('tmp/test.tct'))
332
- end
333
-
334
- #
335
- # Tokyo Tyrant table ===========================================================
336
- #
337
-
338
- rufus_table_bench(
339
- 'TT table', Rufus::Tokyo::TyrantTable.new('localhost', 45001))
340
-
341
-
342
- #
343
- # 'author' Tokyo Tyrant table ==================================================
344
- #
345
-
346
- if defined?(TokyoTyrant)
347
-
348
- rufus_table_bench(
349
- "net TT table", Rufus::Edo::NetTyrantTable.new('127.0.0.1', 45001))
350
- end
351
-
352
- puts
353
-