winescout-redis 0.0.3

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.
@@ -0,0 +1,323 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ class Foo
4
+ attr_accessor :bar
5
+ def initialize(bar)
6
+ @bar = bar
7
+ end
8
+
9
+ def ==(other)
10
+ @bar == other.bar
11
+ end
12
+ end
13
+
14
+ describe "redis" do
15
+ before(:all) do
16
+ @r = Redis.new
17
+ @r.select_db(15) # use database 15 for testing so we dont accidentally step on you real data
18
+ end
19
+
20
+ before(:each) do
21
+ @r['foo'] = 'bar'
22
+ end
23
+
24
+ after(:each) do
25
+ @r.flush_db
26
+ end
27
+
28
+ after(:all) do
29
+ @r.quit
30
+ end
31
+
32
+
33
+ it "should be able to GET a key" do
34
+ @r['foo'].should == 'bar'
35
+ end
36
+
37
+ it "should be able to SET a key" do
38
+ @r['foo'] = 'nik'
39
+ @r['foo'].should == 'nik'
40
+ end
41
+
42
+ it "should be able to SETNX(set_unless_exists)" do
43
+ @r['foo'] = 'nik'
44
+ @r['foo'].should == 'nik'
45
+ @r.set_unless_exists 'foo', 'bar'
46
+ @r['foo'].should == 'nik'
47
+ end
48
+ #
49
+ it "should be able to INCR(increment) a key" do
50
+ @r.delete('counter')
51
+ @r.incr('counter').should == 1
52
+ @r.incr('counter').should == 2
53
+ @r.incr('counter').should == 3
54
+ end
55
+ #
56
+ it "should be able to DECR(decrement) a key" do
57
+ @r.delete('counter')
58
+ @r.incr('counter').should == 1
59
+ @r.incr('counter').should == 2
60
+ @r.incr('counter').should == 3
61
+ @r.decr('counter').should == 2
62
+ @r.decr('counter').should == 1
63
+ @r.decr('counter').should == 0
64
+ end
65
+ #
66
+ it "should be able to RANDKEY(return a random key)" do
67
+ @r.randkey.should_not be_nil
68
+ end
69
+ #
70
+ it "should be able to RENAME a key" do
71
+ @r.delete 'foo'
72
+ @r.delete 'bar'
73
+ @r['foo'] = 'hi'
74
+ @r.rename! 'foo', 'bar'
75
+ @r['bar'].should == 'hi'
76
+ end
77
+ #
78
+ it "should be able to RENAMENX(rename unless the new key already exists) a key" do
79
+ @r.delete 'foo'
80
+ @r.delete 'bar'
81
+ @r['foo'] = 'hi'
82
+ @r['bar'] = 'ohai'
83
+ lambda {@r.rename 'foo', 'bar'}.should raise_error(RedisRenameError)
84
+ @r['bar'].should == 'ohai'
85
+ end
86
+ #
87
+ it "should be able to EXISTS(check if key exists)" do
88
+ @r['foo'] = 'nik'
89
+ @r.key?('foo').should be_true
90
+ @r.delete 'foo'
91
+ @r.key?('foo').should be_false
92
+ end
93
+ #
94
+ it "should be able to KEYS(glob for keys)" do
95
+ @r.keys("f*").each do |key|
96
+ @r.delete key
97
+ end
98
+ @r['f'] = 'nik'
99
+ @r['fo'] = 'nak'
100
+ @r['foo'] = 'qux'
101
+ @r.keys("f*").sort.should == ['f','fo', 'foo'].sort
102
+ end
103
+ #
104
+ it "should be able to check the TYPE of a key" do
105
+ @r['foo'] = 'nik'
106
+ @r.type?('foo').should == "string"
107
+ @r.delete 'foo'
108
+ @r.type?('foo').should == "none"
109
+ end
110
+ #
111
+ it "should be able to push to the head of a list" do
112
+ @r.push_head "list", 'hello'
113
+ @r.push_head "list", 42
114
+ @r.type?('list').should == "list"
115
+ @r.list_length('list').should == 2
116
+ @r.pop_head('list').should == '42'
117
+ @r.delete('list')
118
+ end
119
+ #
120
+ it "should be able to push to the tail of a list" do
121
+ @r.push_tail "list", 'hello'
122
+ @r.type?('list').should == "list"
123
+ @r.list_length('list').should == 1
124
+ @r.delete('list')
125
+ end
126
+ #
127
+ it "should be able to pop the tail of a list" do
128
+ @r.push_tail "list", 'hello'
129
+ @r.push_tail "list", 'goodbye'
130
+ @r.type?('list').should == "list"
131
+ @r.list_length('list').should == 2
132
+ @r.pop_tail('list').should == 'goodbye'
133
+ @r.delete('list')
134
+ end
135
+ #
136
+ it "should be able to pop the head of a list" do
137
+ @r.push_tail "list", 'hello'
138
+ @r.push_tail "list", 'goodbye'
139
+ @r.type?('list').should == "list"
140
+ @r.list_length('list').should == 2
141
+ @r.pop_head('list').should == 'hello'
142
+ @r.delete('list')
143
+ end
144
+ #
145
+ it "should be able to get the length of a list" do
146
+ @r.push_tail "list", 'hello'
147
+ @r.push_tail "list", 'goodbye'
148
+ @r.type?('list').should == "list"
149
+ @r.list_length('list').should == 2
150
+ @r.delete('list')
151
+ end
152
+ #
153
+ it "should be able to get a range of values from a list" do
154
+ @r.push_tail "list", 'hello'
155
+ @r.push_tail "list", 'goodbye'
156
+ @r.push_tail "list", '1'
157
+ @r.push_tail "list", '2'
158
+ @r.push_tail "list", '3'
159
+ @r.type?('list').should == "list"
160
+ @r.list_length('list').should == 5
161
+ @r.list_range('list', 2, -1).should == ['1', '2', '3']
162
+ @r.delete('list')
163
+ end
164
+ #
165
+ it "should be able to trim a list" do
166
+ @r.push_tail "list", 'hello'
167
+ @r.push_tail "list", 'goodbye'
168
+ @r.push_tail "list", '1'
169
+ @r.push_tail "list", '2'
170
+ @r.push_tail "list", '3'
171
+ @r.type?('list').should == "list"
172
+ @r.list_length('list').should == 5
173
+ @r.list_trim 'list', 0, 1
174
+ @r.list_length('list').should == 2
175
+ @r.list_range('list', 0, -1).should == ['hello', 'goodbye']
176
+ @r.delete('list')
177
+ end
178
+ #
179
+ it "should be able to get a value by indexing into a list" do
180
+ @r.push_tail "list", 'hello'
181
+ @r.push_tail "list", 'goodbye'
182
+ @r.type?('list').should == "list"
183
+ @r.list_length('list').should == 2
184
+ @r.list_index('list', 1).should == 'goodbye'
185
+ @r.delete('list')
186
+ end
187
+ #
188
+ it "should be able to set a value by indexing into a list" do
189
+ @r.push_tail "list", 'hello'
190
+ @r.push_tail "list", 'hello'
191
+ @r.type?('list').should == "list"
192
+ @r.list_length('list').should == 2
193
+ @r.list_set('list', 1, 'goodbye').should be_true
194
+ @r.list_index('list', 1).should == 'goodbye'
195
+ @r.delete('list')
196
+ end
197
+ #
198
+ it "should be able to remove values from a list LREM" do
199
+ @r.push_tail "list", 'hello'
200
+ @r.push_tail "list", 'goodbye'
201
+ @r.type?('list').should == "list"
202
+ @r.list_length('list').should == 2
203
+ @r.list_rm('list', 1, 'hello').should == 1
204
+ @r.list_range('list', 0, -1).should == ['goodbye']
205
+ @r.delete('list')
206
+ end
207
+ #
208
+ it "should be able add members to a set" do
209
+ @r.set_add "set", 'key1'
210
+ @r.set_add "set", 'key2'
211
+ @r.type?('set').should == "set"
212
+ @r.set_count('set').should == 2
213
+ @r.set_members('set').sort.should == ['key1', 'key2'].sort
214
+ @r.delete('set')
215
+ end
216
+ #
217
+ it "should be able delete members to a set" do
218
+ @r.set_add "set", 'key1'
219
+ @r.set_add "set", 'key2'
220
+ @r.type?('set').should == "set"
221
+ @r.set_count('set').should == 2
222
+ @r.set_members('set').should == Set.new(['key1', 'key2'])
223
+ @r.set_delete('set', 'key1')
224
+ @r.set_count('set').should == 1
225
+ @r.set_members('set').should == Set.new(['key2'])
226
+ @r.delete('set')
227
+ end
228
+ #
229
+ it "should be able count the members of a set" do
230
+ @r.set_add "set", 'key1'
231
+ @r.set_add "set", 'key2'
232
+ @r.type?('set').should == "set"
233
+ @r.set_count('set').should == 2
234
+ @r.delete('set')
235
+ end
236
+ #
237
+ it "should be able test for set membership" do
238
+ @r.set_add "set", 'key1'
239
+ @r.set_add "set", 'key2'
240
+ @r.type?('set').should == "set"
241
+ @r.set_count('set').should == 2
242
+ @r.set_member?('set', 'key1').should be_true
243
+ @r.set_member?('set', 'key2').should be_true
244
+ @r.set_member?('set', 'notthere').should be_false
245
+ @r.delete('set')
246
+ end
247
+ #
248
+ it "should be able to do set intersection" do
249
+ @r.set_add "set", 'key1'
250
+ @r.set_add "set", 'key2'
251
+ @r.set_add "set2", 'key2'
252
+ @r.set_intersect('set', 'set2').should == Set.new(['key2'])
253
+ @r.delete('set')
254
+ end
255
+ #
256
+ it "should be able to do set intersection and store the results in a key" do
257
+ @r.set_add "set", 'key1'
258
+ @r.set_add "set", 'key2'
259
+ @r.set_add "set2", 'key2'
260
+ @r.set_inter_store('newone', 'set', 'set2')
261
+ @r.set_members('newone').should == Set.new(['key2'])
262
+ @r.delete('set')
263
+ end
264
+ #
265
+ it "should be able to do crazy SORT queries" do
266
+ @r['dog_1'] = 'louie'
267
+ @r.push_tail 'dogs', 1
268
+ @r['dog_2'] = 'lucy'
269
+ @r.push_tail 'dogs', 2
270
+ @r['dog_3'] = 'max'
271
+ @r.push_tail 'dogs', 3
272
+ @r['dog_4'] = 'taj'
273
+ @r.push_tail 'dogs', 4
274
+ @r.sort('dogs', :get => 'dog_*', :limit => [0,1]).should == ['louie']
275
+ @r.sort('dogs', :get => 'dog_*', :limit => [0,1], :order => 'desc alpha').should == ['taj']
276
+ end
277
+ #
278
+ it "should provide info" do
279
+ [:last_save_time, :redis_version, :total_connections_received, :connected_clients, :total_commands_processed, :connected_slaves, :uptime_in_seconds, :used_memory, :uptime_in_days, :changes_since_last_save].each do |x|
280
+ @r.info.keys.should include(x)
281
+ end
282
+ end
283
+ #
284
+ it "should be able to flush the database" do
285
+ @r['key1'] = 'keyone'
286
+ @r['key2'] = 'keytwo'
287
+ @r.keys('*').sort.should == ['foo', 'key1', 'key2'] #foo from before
288
+ @r.flush_db
289
+ @r.keys('*').should == []
290
+ end
291
+ #
292
+ it "should be able to provide the last save time" do
293
+ savetime = @r.last_save
294
+ Time.at(savetime).class.should == Time
295
+ Time.at(savetime).should <= Time.now
296
+ end
297
+
298
+ it "should be able to MGET keys" do
299
+ @r['foo'] = 1000
300
+ @r['bar'] = 2000
301
+ @r.mget('foo', 'bar').should == ['1000', '2000']
302
+ @r.mget('foo', 'bar', 'baz').should == ['1000', '2000', nil]
303
+ end
304
+
305
+ it "should bgsave" do
306
+ lambda {@r.bgsave}.should_not raise_error(RedisError)
307
+ end
308
+
309
+ it "should handle multiple servers" do
310
+ require 'dist_redis'
311
+ @r = DistRedis.new('localhost:6379', '127.0.0.1:6379')
312
+ @r.select_db(15) # use database 15 for testing so we dont accidentally step on you real data
313
+
314
+ 100.times do |idx|
315
+ @r[idx] = "foo#{idx}"
316
+ end
317
+
318
+ 100.times do |idx|
319
+ @r[idx].should == "foo#{idx}"
320
+ end
321
+ end
322
+
323
+ end
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+ $TESTING=true
3
+ $:.push File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require 'redis'
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: winescout-redis
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Ezra Zygmuntowicz
8
+ - Taylor Weibley
9
+ autorequire: redis
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-03-31 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Ruby client library for redis key value storage server
18
+ email: ez@engineyard.com
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - LICENSE
25
+ files:
26
+ - LICENSE
27
+ - README.markdown
28
+ - Rakefile
29
+ - lib/redis.rb
30
+ - lib/dist_redis.rb
31
+ - lib/hash_ring.rb
32
+ - lib/server.rb
33
+ - lib/better_timeout.rb
34
+ - spec/redis_spec.rb
35
+ - spec/spec_helper.rb
36
+ has_rdoc: true
37
+ homepage: http://github.com/ezmobius/redis-rb
38
+ post_install_message:
39
+ rdoc_options: []
40
+
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ version:
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ requirements: []
56
+
57
+ rubyforge_project:
58
+ rubygems_version: 1.2.0
59
+ signing_key:
60
+ specification_version: 2
61
+ summary: Ruby client library for redis key value storage server
62
+ test_files: []
63
+