rediska 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/rediska/driver.rb +34 -1
- data/lib/rediska/version.rb +1 -1
- data/spec/support/keys.rb +47 -0
- data/spec/support/strings.rb +28 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b925c99be9718a0a3e6d13337995347425b9d77
|
4
|
+
data.tar.gz: 2b5a2d0e166f101fa7bea426b65c19386c9fd3e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a74e9bfc2f2ec3d2be3ab702ab94ca205d01b62b825f9850b3c967a32afc42ac97bdb51632b49c63b9b15c075d92d3a9b61b49a553af41afb3a144e4a11661e
|
7
|
+
data.tar.gz: 8ebe0205e528f90c9c980bb87b90ae9d17f692b70b3e63bc795f0b4dd94189d6094fda19368e639f8af0df35fdf43f2a367bd477e0e95ac521a5e54520c2b2b0
|
data/Gemfile.lock
CHANGED
data/lib/rediska/driver.rb
CHANGED
@@ -595,7 +595,7 @@ module Rediska
|
|
595
595
|
old_val = data[key] ? data[key].unpack('B*')[0].split('') : []
|
596
596
|
size_increment = [((offset/8)+1)*8-old_val.length, 0].max
|
597
597
|
old_val += Array.new(size_increment).map{'0'}
|
598
|
-
original_val = old_val[offset]
|
598
|
+
original_val = old_val[offset].to_i
|
599
599
|
old_val[offset] = bit.to_s
|
600
600
|
new_val = ''
|
601
601
|
old_val.each_slice(8){|b| new_val = new_val + b.join('').to_i(2).chr }
|
@@ -704,6 +704,39 @@ module Rediska
|
|
704
704
|
'OK'
|
705
705
|
end
|
706
706
|
|
707
|
+
def scan(start_cursor, *args)
|
708
|
+
match = '*'
|
709
|
+
count = 10
|
710
|
+
|
711
|
+
if args.size.odd?
|
712
|
+
raise_argument_error('scan')
|
713
|
+
end
|
714
|
+
|
715
|
+
if idx = args.index('MATCH')
|
716
|
+
match = args[idx + 1]
|
717
|
+
end
|
718
|
+
|
719
|
+
if idx = args.index('COUNT')
|
720
|
+
count = args[idx + 1]
|
721
|
+
end
|
722
|
+
|
723
|
+
start_cursor = start_cursor.to_i
|
724
|
+
data_type_check(start_cursor, Fixnum)
|
725
|
+
|
726
|
+
cursor = start_cursor
|
727
|
+
next_keys = []
|
728
|
+
|
729
|
+
if start_cursor + count >= data.length
|
730
|
+
next_keys = keys(match)[start_cursor..-1]
|
731
|
+
cursor = 0
|
732
|
+
else
|
733
|
+
cursor = start_cursor + 10
|
734
|
+
next_keys = keys(match)[start_cursor..cursor]
|
735
|
+
end
|
736
|
+
|
737
|
+
return "#{cursor}", next_keys
|
738
|
+
end
|
739
|
+
|
707
740
|
def zadd(key, *args)
|
708
741
|
if !args.first.is_a?(Array)
|
709
742
|
if args.size < 2
|
data/lib/rediska/version.rb
CHANGED
data/spec/support/keys.rb
CHANGED
@@ -279,4 +279,51 @@ shared_examples 'keys' do
|
|
279
279
|
subject.select(0)
|
280
280
|
subject.get('key1').should eq('1')
|
281
281
|
end
|
282
|
+
|
283
|
+
it 'should scan all keys in the database' do
|
284
|
+
100.times do |x|
|
285
|
+
subject.set("key#{x}", "#{x}")
|
286
|
+
end
|
287
|
+
|
288
|
+
cursor = 0
|
289
|
+
all_keys = []
|
290
|
+
loop do
|
291
|
+
cursor, keys = subject.scan(cursor)
|
292
|
+
all_keys += keys
|
293
|
+
break if cursor == '0'
|
294
|
+
end
|
295
|
+
|
296
|
+
all_keys.uniq.should have(100).items
|
297
|
+
all_keys[0].should =~ /key\d+/
|
298
|
+
end
|
299
|
+
|
300
|
+
it "should match keys to a pattern when scanning" do
|
301
|
+
50.times do |x|
|
302
|
+
subject.set("key#{x}", "#{x}")
|
303
|
+
end
|
304
|
+
|
305
|
+
subject.set('miss_me', 1)
|
306
|
+
subject.set('pass_me', 2)
|
307
|
+
|
308
|
+
cursor = 0
|
309
|
+
all_keys = []
|
310
|
+
loop do
|
311
|
+
cursor, keys = subject.scan(cursor, match: 'key*')
|
312
|
+
all_keys += keys
|
313
|
+
break if cursor == '0'
|
314
|
+
end
|
315
|
+
|
316
|
+
all_keys.uniq.should have(50).items
|
317
|
+
end
|
318
|
+
|
319
|
+
it 'should specify doing more work when scanning' do
|
320
|
+
100.times do |x|
|
321
|
+
subject.set("key#{x}", "#{x}")
|
322
|
+
end
|
323
|
+
|
324
|
+
cursor, all_keys = subject.scan(cursor, count: 100)
|
325
|
+
|
326
|
+
cursor.should eq('0')
|
327
|
+
all_keys.uniq.should have(100).items
|
328
|
+
end
|
282
329
|
end
|
data/spec/support/strings.rb
CHANGED
@@ -41,6 +41,34 @@ shared_examples 'strings' do
|
|
41
41
|
subject.getbit('key1', 10).should eq(1)
|
42
42
|
end
|
43
43
|
|
44
|
+
context 'when a bit is previously set to 0' do
|
45
|
+
before do
|
46
|
+
subject.setbit('key1', 10, 0)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'setting it to 1 returns 0' do
|
50
|
+
subject.setbit('key1', 10, 1).should eq(0)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'setting it to 0 returns 0' do
|
54
|
+
subject.setbit('key1', 10, 0).should eq(0)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'when a bit is previously set to 1' do
|
59
|
+
before do
|
60
|
+
subject.setbit('key1', 10, 1)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'setting it to 0 returns 1' do
|
64
|
+
subject.setbit('key1', 10, 0).should eq(1)
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'setting it to 1 returns 1' do
|
68
|
+
subject.setbit('key1', 10, 1).should eq(1)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
44
72
|
it 'should get a substring of the string stored at a key' do
|
45
73
|
subject.set('key1', 'This a message')
|
46
74
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rediska
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leonid Beder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|