mock_redis 0.36.0 → 0.37.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +1 -1
- data/lib/mock_redis/database.rb +1 -1
- data/lib/mock_redis/hash_methods.rb +1 -1
- data/lib/mock_redis/list_methods.rb +7 -2
- data/lib/mock_redis/multi_db_wrapper.rb +1 -1
- data/lib/mock_redis/pipelined_wrapper.rb +12 -14
- data/lib/mock_redis/set_methods.rb +6 -1
- data/lib/mock_redis/stream.rb +3 -3
- data/lib/mock_redis/string_methods.rb +3 -3
- data/lib/mock_redis/transaction_wrapper.rb +5 -7
- data/lib/mock_redis/utility_methods.rb +4 -2
- data/lib/mock_redis/version.rb +1 -1
- data/lib/mock_redis/zset.rb +4 -2
- data/lib/mock_redis/zset_methods.rb +3 -3
- data/lib/mock_redis.rb +1 -2
- metadata +19 -360
- data/.github/workflows/lint.yml +0 -31
- data/.github/workflows/tests.yml +0 -63
- data/.gitignore +0 -5
- data/.mailmap +0 -2
- data/.overcommit.yml +0 -21
- data/.rspec +0 -1
- data/.rubocop.yml +0 -148
- data/.rubocop_todo.yml +0 -35
- data/.simplecov +0 -4
- data/Gemfile +0 -13
- data/Rakefile +0 -2
- data/mock_redis.gemspec +0 -32
- data/spec/client_spec.rb +0 -36
- data/spec/cloning_spec.rb +0 -95
- data/spec/commands/append_spec.rb +0 -24
- data/spec/commands/auth_spec.rb +0 -7
- data/spec/commands/bgrewriteaof_spec.rb +0 -7
- data/spec/commands/bgsave_spec.rb +0 -7
- data/spec/commands/bitcount_spec.rb +0 -25
- data/spec/commands/bitfield_spec.rb +0 -169
- data/spec/commands/blmove_spec.rb +0 -52
- data/spec/commands/blpop_spec.rb +0 -53
- data/spec/commands/brpop_spec.rb +0 -59
- data/spec/commands/brpoplpush_spec.rb +0 -52
- data/spec/commands/connected_spec.rb +0 -7
- data/spec/commands/connection_spec.rb +0 -15
- data/spec/commands/dbsize_spec.rb +0 -18
- data/spec/commands/decr_spec.rb +0 -34
- data/spec/commands/decrby_spec.rb +0 -34
- data/spec/commands/del_spec.rb +0 -52
- data/spec/commands/disconnect_spec.rb +0 -7
- data/spec/commands/dump_spec.rb +0 -19
- data/spec/commands/echo_spec.rb +0 -11
- data/spec/commands/eval_spec.rb +0 -7
- data/spec/commands/evalsha_spec.rb +0 -10
- data/spec/commands/exists_spec.rb +0 -43
- data/spec/commands/expire_spec.rb +0 -111
- data/spec/commands/expireat_spec.rb +0 -47
- data/spec/commands/flushall_spec.rb +0 -38
- data/spec/commands/flushdb_spec.rb +0 -38
- data/spec/commands/future_spec.rb +0 -30
- data/spec/commands/geoadd_spec.rb +0 -58
- data/spec/commands/geodist_spec.rb +0 -118
- data/spec/commands/geohash_spec.rb +0 -52
- data/spec/commands/geopos_spec.rb +0 -55
- data/spec/commands/get_spec.rb +0 -31
- data/spec/commands/getbit_spec.rb +0 -34
- data/spec/commands/getdel.rb +0 -24
- data/spec/commands/getrange_spec.rb +0 -22
- data/spec/commands/getset_spec.rb +0 -23
- data/spec/commands/hdel_spec.rb +0 -77
- data/spec/commands/hexists_spec.rb +0 -27
- data/spec/commands/hget_spec.rb +0 -28
- data/spec/commands/hgetall_spec.rb +0 -32
- data/spec/commands/hincrby_spec.rb +0 -58
- data/spec/commands/hincrbyfloat_spec.rb +0 -58
- data/spec/commands/hkeys_spec.rb +0 -19
- data/spec/commands/hlen_spec.rb +0 -19
- data/spec/commands/hmget_spec.rb +0 -46
- data/spec/commands/hmset_spec.rb +0 -69
- data/spec/commands/hscan_each_spec.rb +0 -48
- data/spec/commands/hscan_spec.rb +0 -27
- data/spec/commands/hset_spec.rb +0 -42
- data/spec/commands/hsetnx_spec.rb +0 -44
- data/spec/commands/hvals_spec.rb +0 -19
- data/spec/commands/incr_spec.rb +0 -34
- data/spec/commands/incrby_spec.rb +0 -44
- data/spec/commands/incrbyfloat_spec.rb +0 -44
- data/spec/commands/info_spec.rb +0 -62
- data/spec/commands/keys_spec.rb +0 -139
- data/spec/commands/lastsave_spec.rb +0 -8
- data/spec/commands/lindex_spec.rb +0 -49
- data/spec/commands/linsert_spec.rb +0 -68
- data/spec/commands/llen_spec.rb +0 -16
- data/spec/commands/lmove_spec.rb +0 -72
- data/spec/commands/lpop_spec.rb +0 -35
- data/spec/commands/lpush_spec.rb +0 -43
- data/spec/commands/lpushx_spec.rb +0 -46
- data/spec/commands/lrange_spec.rb +0 -51
- data/spec/commands/lrem_spec.rb +0 -80
- data/spec/commands/lset_spec.rb +0 -43
- data/spec/commands/ltrim_spec.rb +0 -45
- data/spec/commands/mapped_hmget_spec.rb +0 -29
- data/spec/commands/mapped_hmset_spec.rb +0 -47
- data/spec/commands/mapped_mget_spec.rb +0 -22
- data/spec/commands/mapped_mset_spec.rb +0 -19
- data/spec/commands/mapped_msetnx_spec.rb +0 -26
- data/spec/commands/mget_spec.rb +0 -65
- data/spec/commands/move_spec.rb +0 -147
- data/spec/commands/mset_spec.rb +0 -43
- data/spec/commands/msetnx_spec.rb +0 -40
- data/spec/commands/persist_spec.rb +0 -48
- data/spec/commands/pexpire_spec.rb +0 -86
- data/spec/commands/pexpireat_spec.rb +0 -48
- data/spec/commands/ping_spec.rb +0 -11
- data/spec/commands/pipelined_spec.rb +0 -114
- data/spec/commands/psetex_spec.rb +0 -44
- data/spec/commands/pttl_spec.rb +0 -41
- data/spec/commands/quit_spec.rb +0 -7
- data/spec/commands/randomkey_spec.rb +0 -20
- data/spec/commands/rename_spec.rb +0 -42
- data/spec/commands/renamenx_spec.rb +0 -41
- data/spec/commands/restore_spec.rb +0 -47
- data/spec/commands/rpop_spec.rb +0 -35
- data/spec/commands/rpoplpush_spec.rb +0 -50
- data/spec/commands/rpush_spec.rb +0 -43
- data/spec/commands/rpushx_spec.rb +0 -46
- data/spec/commands/sadd_spec.rb +0 -45
- data/spec/commands/save_spec.rb +0 -7
- data/spec/commands/scan_each_spec.rb +0 -39
- data/spec/commands/scan_spec.rb +0 -64
- data/spec/commands/scard_spec.rb +0 -18
- data/spec/commands/script_spec.rb +0 -9
- data/spec/commands/sdiff_spec.rb +0 -47
- data/spec/commands/sdiffstore_spec.rb +0 -58
- data/spec/commands/select_spec.rb +0 -61
- data/spec/commands/set_spec.rb +0 -134
- data/spec/commands/setbit_spec.rb +0 -55
- data/spec/commands/setex_spec.rb +0 -38
- data/spec/commands/setnx_spec.rb +0 -25
- data/spec/commands/setrange_spec.rb +0 -30
- data/spec/commands/sinter_spec.rb +0 -39
- data/spec/commands/sinterstore_spec.rb +0 -53
- data/spec/commands/sismember_spec.rb +0 -29
- data/spec/commands/smembers_spec.rb +0 -28
- data/spec/commands/smismember_spec.rb +0 -34
- data/spec/commands/smove_spec.rb +0 -41
- data/spec/commands/sort_list_spec.rb +0 -21
- data/spec/commands/sort_set_spec.rb +0 -21
- data/spec/commands/sort_zset_spec.rb +0 -21
- data/spec/commands/spop_spec.rb +0 -40
- data/spec/commands/srandmember_spec.rb +0 -49
- data/spec/commands/srem_spec.rb +0 -45
- data/spec/commands/sscan_each_spec.rb +0 -48
- data/spec/commands/sscan_spec.rb +0 -39
- data/spec/commands/strlen_spec.rb +0 -18
- data/spec/commands/sunion_spec.rb +0 -42
- data/spec/commands/sunionstore_spec.rb +0 -59
- data/spec/commands/ttl_spec.rb +0 -40
- data/spec/commands/type_spec.rb +0 -36
- data/spec/commands/unwatch_spec.rb +0 -7
- data/spec/commands/watch_spec.rb +0 -21
- data/spec/commands/xadd_spec.rb +0 -122
- data/spec/commands/xlen_spec.rb +0 -22
- data/spec/commands/xrange_spec.rb +0 -164
- data/spec/commands/xread_spec.rb +0 -66
- data/spec/commands/xrevrange_spec.rb +0 -130
- data/spec/commands/xtrim_spec.rb +0 -36
- data/spec/commands/zadd_spec.rb +0 -129
- data/spec/commands/zcard_spec.rb +0 -19
- data/spec/commands/zcount_spec.rb +0 -39
- data/spec/commands/zincrby_spec.rb +0 -31
- data/spec/commands/zinterstore_spec.rb +0 -130
- data/spec/commands/zpopmax_spec.rb +0 -60
- data/spec/commands/zpopmin_spec.rb +0 -60
- data/spec/commands/zrange_spec.rb +0 -80
- data/spec/commands/zrangebyscore_spec.rb +0 -83
- data/spec/commands/zrank_spec.rb +0 -29
- data/spec/commands/zrem_spec.rb +0 -50
- data/spec/commands/zremrangebyrank_spec.rb +0 -27
- data/spec/commands/zremrangebyscore_spec.rb +0 -35
- data/spec/commands/zrevrange_spec.rb +0 -56
- data/spec/commands/zrevrangebyscore_spec.rb +0 -58
- data/spec/commands/zrevrank_spec.rb +0 -29
- data/spec/commands/zscan_each_spec.rb +0 -48
- data/spec/commands/zscan_spec.rb +0 -26
- data/spec/commands/zscore_spec.rb +0 -22
- data/spec/commands/zunionstore_spec.rb +0 -137
- data/spec/mock_redis_spec.rb +0 -93
- data/spec/spec_helper.rb +0 -74
- data/spec/support/redis_multiplexer.rb +0 -123
- data/spec/support/shared_examples/does_not_cleanup_empty_strings.rb +0 -14
- data/spec/support/shared_examples/only_operates_on_hashes.rb +0 -15
- data/spec/support/shared_examples/only_operates_on_lists.rb +0 -15
- data/spec/support/shared_examples/only_operates_on_sets.rb +0 -15
- data/spec/support/shared_examples/only_operates_on_strings.rb +0 -13
- data/spec/support/shared_examples/only_operates_on_zsets.rb +0 -59
- data/spec/support/shared_examples/sorts_enumerables.rb +0 -56
- data/spec/transactions_spec.rb +0 -163
data/spec/commands/xadd_spec.rb
DELETED
@@ -1,122 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#xadd("mystream", { f1: "v1", f2: "v2" }, id: "0-0", maxlen: 1000, approximate: true)' do
|
4
|
-
before :all do
|
5
|
-
sleep 1 - (Time.now.to_f % 1)
|
6
|
-
@key = 'mock-redis-test:xadd'
|
7
|
-
end
|
8
|
-
|
9
|
-
before :each do
|
10
|
-
# TODO: Redis appears to be returning a timestamp a few seconds in the future
|
11
|
-
# so we're ignoring the last 5 digits (time in milliseconds)
|
12
|
-
@redises._gsub(/\d{5}-\d/, '....-.')
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'returns an id based on the timestamp' do
|
16
|
-
t = Time.now.to_i
|
17
|
-
id = @redises.xadd(@key, { key: 'value' })
|
18
|
-
expect(id).to match(/#{t}\d{3}-0/)
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'adds data with symbols' do
|
22
|
-
@redises.xadd(@key, { symbol_key: :symbol_value })
|
23
|
-
expect(@redises.xrange(@key, '-', '+').last[1])
|
24
|
-
.to eq('symbol_key' => 'symbol_value')
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'increments the sequence number with the same timestamp' do
|
28
|
-
Timecop.freeze do
|
29
|
-
@redises.xadd(@key, { key: 'value' })
|
30
|
-
expect(@redises.xadd(@key, { key: 'value' })).to match(/\d+-1/)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'sets the id if it is given' do
|
35
|
-
expect(@redises.xadd(@key, { key: 'value' }, id: '1234567891234-2'))
|
36
|
-
.to eq '1234567891234-2'
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'accepts is as an integer' do
|
40
|
-
expect(@redises.xadd(@key, { key: 'value' }, id: 1_234_567_891_234))
|
41
|
-
.to eq '1234567891234-0'
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'raises exception if id is less that stream top item' do
|
45
|
-
@redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
|
46
|
-
expect { @redises.xadd(@key, { key: 'value' }, id: '1234567891233-0') }
|
47
|
-
.to raise_error(
|
48
|
-
Redis::CommandError,
|
49
|
-
'ERR The ID specified in XADD is equal or smaller than the target ' \
|
50
|
-
'stream top item'
|
51
|
-
)
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'raises exception if id of 0 is added to an empty stream' do
|
55
|
-
expect { @redises.xadd('mock-redis-test:unknown-stream', { key: 'value' }, id: '0') }
|
56
|
-
.to raise_error(
|
57
|
-
Redis::CommandError,
|
58
|
-
'ERR The ID specified in XADD must be greater than 0-0'
|
59
|
-
)
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'does not raise exception on empty stream with id of 0 and positive sequence number' do
|
63
|
-
expect { @redises.xadd('mock-redis-test:unknown-stream', { key: 'value' }, id: '0-1') }
|
64
|
-
.to_not raise_error
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'caters for the current time being before the last time' do
|
68
|
-
t = (Time.now.to_f * 1000).to_i + 2000
|
69
|
-
@redises.xadd(@key, { key: 'value' }, id: "#{t}-0")
|
70
|
-
expect(@redises.xadd(@key, { key: 'value' })).to match(/#{t}-1/)
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'appends a sequence number if it is missing' do
|
74
|
-
expect(@redises.xadd(@key, { key: 'value' }, id: '1234567891234'))
|
75
|
-
.to eq '1234567891234-0'
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'raises an invalid stream id error' do
|
79
|
-
expect { @redises.xadd(@key, { key: 'value' }, id: 'X') }
|
80
|
-
.to raise_error(
|
81
|
-
Redis::CommandError,
|
82
|
-
'ERR Invalid stream ID specified as stream command argument'
|
83
|
-
)
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'caps the stream to 5 elements' do
|
87
|
-
@redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-0')
|
88
|
-
@redises.xadd(@key, { key2: 'value2' }, id: '1234567891245-0')
|
89
|
-
@redises.xadd(@key, { key3: 'value3' }, id: '1234567891245-1')
|
90
|
-
@redises.xadd(@key, { key4: 'value4' }, id: '1234567891278-0')
|
91
|
-
@redises.xadd(@key, { key5: 'value5' }, id: '1234567891278-1')
|
92
|
-
@redises.xadd(@key, { key6: 'value6' }, id: '1234567891299-0')
|
93
|
-
@redises.xadd(@key, { key7: 'value7' }, id: '1234567891300-0', maxlen: 5)
|
94
|
-
expect(@redises.xrange(@key, '-', '+')).to eq(
|
95
|
-
[
|
96
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
97
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
98
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
99
|
-
['1234567891299-0', { 'key6' => 'value6' }],
|
100
|
-
['1234567891300-0', { 'key7' => 'value7' }]
|
101
|
-
]
|
102
|
-
)
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'supports a maxlen greater than the current size' do
|
106
|
-
@redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-0')
|
107
|
-
@redises.xadd(@key, { key2: 'value2' }, id: '1234567891245-0', maxlen: 1000)
|
108
|
-
expect(@redises.xrange(@key, '-', '+')).to eq(
|
109
|
-
[
|
110
|
-
['1234567891234-0', { 'key1' => 'value1' }],
|
111
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
112
|
-
]
|
113
|
-
)
|
114
|
-
end
|
115
|
-
|
116
|
-
it 'creates an empty stream with maxlen of 0' do
|
117
|
-
@redises.xadd(@key, { key: 'value' }, maxlen: 0)
|
118
|
-
expect(@redises.xlen(@key)).to eq 0
|
119
|
-
expect(@redises.xrange(@key, '-', '+')).to eq([])
|
120
|
-
expect(@redises.exists?(@key)).to eq true
|
121
|
-
end
|
122
|
-
end
|
data/spec/commands/xlen_spec.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#xlen(key)' do
|
4
|
-
before :all do
|
5
|
-
sleep 1 - (Time.now.to_f % 1)
|
6
|
-
@key = 'mock-redis-test:xlen'
|
7
|
-
end
|
8
|
-
|
9
|
-
before :each do
|
10
|
-
# TODO: Redis appears to be returning a timestamp a few seconds in the future
|
11
|
-
# so we're ignoring the last 5 digits (time in milliseconds)
|
12
|
-
@redises._gsub(/\d{5}-\d/, '...-.')
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'returns the number of items in the stream' do
|
16
|
-
expect(@redises.xlen(@key)).to eq 0
|
17
|
-
@redises.xadd(@key, { key: 'value' })
|
18
|
-
expect(@redises.xlen(@key)).to eq 1
|
19
|
-
3.times { @redises.xadd(@key, { key: 'value' }) }
|
20
|
-
expect(@redises.xlen(@key)).to eq 4
|
21
|
-
end
|
22
|
-
end
|
@@ -1,164 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#xrange("mystream", first: "0-1", last: "0-3", count: 10)' do
|
4
|
-
before { @key = 'mock-redis-test:xrange' }
|
5
|
-
|
6
|
-
it 'finds an empty range' do
|
7
|
-
expect(@redises.xrange(@key, '-', '+')).to eq []
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'finds a single entry with a full range' do
|
11
|
-
@redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
|
12
|
-
expect(@redises.xrange(@key, '-', '+'))
|
13
|
-
.to eq [['1234567891234-0', { 'key' => 'value' }]]
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'finds multiple key/value pairs with a full range' do
|
17
|
-
@redises.xadd(@key, { key1: 'value1', key2: 'value2', key3: 'value3' }, id: '1234567891234-0')
|
18
|
-
expect(@redises.xrange(@key, '-', '+'))
|
19
|
-
.to eq [['1234567891234-0', { 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }]]
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'six items on the list' do
|
23
|
-
before :each do
|
24
|
-
@redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-0')
|
25
|
-
@redises.xadd(@key, { key2: 'value2' }, id: '1234567891245-0')
|
26
|
-
@redises.xadd(@key, { key3: 'value3' }, id: '1234567891245-1')
|
27
|
-
@redises.xadd(@key, { key4: 'value4' }, id: '1234567891278-0')
|
28
|
-
@redises.xadd(@key, { key5: 'value5' }, id: '1234567891278-1')
|
29
|
-
@redises.xadd(@key, { key6: 'value6' }, id: '1234567891299-0')
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'returns entries in sequential order' do
|
33
|
-
expect(@redises.xrange(@key, '-', '+')).to eq(
|
34
|
-
[
|
35
|
-
['1234567891234-0', { 'key1' => 'value1' }],
|
36
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
37
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
38
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
39
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
40
|
-
['1234567891299-0', { 'key6' => 'value6' }]
|
41
|
-
]
|
42
|
-
)
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'returns entries with a lower limit' do
|
46
|
-
expect(@redises.xrange(@key, '1234567891239-0', '+')).to eq(
|
47
|
-
[
|
48
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
49
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
50
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
51
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
52
|
-
['1234567891299-0', { 'key6' => 'value6' }]
|
53
|
-
]
|
54
|
-
)
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'returns all entries with a lower limit of 0-0' do
|
58
|
-
expect(@redises.xrange(@key, '0-0', '+')).to eq(
|
59
|
-
[
|
60
|
-
['1234567891234-0', { 'key1' => 'value1' }],
|
61
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
62
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
63
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
64
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
65
|
-
['1234567891299-0', { 'key6' => 'value6' }]
|
66
|
-
]
|
67
|
-
)
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'returns entries with an upper limit' do
|
71
|
-
expect(@redises.xrange(@key, '-', '1234567891285-0')).to eq(
|
72
|
-
[
|
73
|
-
['1234567891234-0', { 'key1' => 'value1' }],
|
74
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
75
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
76
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
77
|
-
['1234567891278-1', { 'key5' => 'value5' }]
|
78
|
-
]
|
79
|
-
)
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'returns entries with both a lower and an upper limit inclusive' do
|
83
|
-
expect(@redises.xrange(@key, '1234567891245-0', '1234567891278-0')).to eq(
|
84
|
-
[
|
85
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
86
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
87
|
-
['1234567891278-0', { 'key4' => 'value4' }]
|
88
|
-
]
|
89
|
-
)
|
90
|
-
end
|
91
|
-
|
92
|
-
it 'returns entries with both a lower and an upper limit exclusive' do
|
93
|
-
expect(@redises.xrange(@key, '(1234567891245-0', '1234567891285-1')).to eq(
|
94
|
-
[
|
95
|
-
# We no longer get '1234567891245-0'
|
96
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
97
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
98
|
-
['1234567891278-1', { 'key5' => 'value5' }] # Note sequence -1
|
99
|
-
]
|
100
|
-
)
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'finds the list with sequence numbers' do
|
104
|
-
expect(@redises.xrange(@key, '1234567891245-1', '1234567891278-0')).to eq(
|
105
|
-
[
|
106
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
107
|
-
['1234567891278-0', { 'key4' => 'value4' }]
|
108
|
-
]
|
109
|
-
)
|
110
|
-
end
|
111
|
-
|
112
|
-
it 'finds the list with lower bound without sequence numbers' do
|
113
|
-
expect(@redises.xrange(@key, '1234567891245', '+')).to eq(
|
114
|
-
[
|
115
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
116
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
117
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
118
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
119
|
-
['1234567891299-0', { 'key6' => 'value6' }]
|
120
|
-
]
|
121
|
-
)
|
122
|
-
end
|
123
|
-
|
124
|
-
it 'finds the list with upper bound without sequence numbers' do
|
125
|
-
expect(@redises.xrange(@key, '-', '1234567891278')).to eq(
|
126
|
-
[
|
127
|
-
['1234567891234-0', { 'key1' => 'value1' }],
|
128
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
129
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
130
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
131
|
-
['1234567891278-1', { 'key5' => 'value5' }]
|
132
|
-
]
|
133
|
-
)
|
134
|
-
end
|
135
|
-
|
136
|
-
it 'accepts limits as integers' do
|
137
|
-
expect(@redises.xrange(@key, 1_234_567_891_245, 1_234_567_891_278)).to eq(
|
138
|
-
[
|
139
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
140
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
141
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
142
|
-
['1234567891278-1', { 'key5' => 'value5' }]
|
143
|
-
]
|
144
|
-
)
|
145
|
-
end
|
146
|
-
|
147
|
-
it 'returns a limited number of items' do
|
148
|
-
expect(@redises.xrange(@key, '-', '+', count: 2)).to eq(
|
149
|
-
[
|
150
|
-
['1234567891234-0', { 'key1' => 'value1' }],
|
151
|
-
['1234567891245-0', { 'key2' => 'value2' }]
|
152
|
-
]
|
153
|
-
)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
it 'raises an invalid stream id error' do
|
158
|
-
expect { @redises.xrange(@key, 'X', '+') }
|
159
|
-
.to raise_error(
|
160
|
-
Redis::CommandError,
|
161
|
-
'ERR Invalid stream ID specified as stream command argument'
|
162
|
-
)
|
163
|
-
end
|
164
|
-
end
|
data/spec/commands/xread_spec.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#xread(keys, ids)' do
|
4
|
-
before :all do
|
5
|
-
sleep 1 - (Time.now.to_f % 1)
|
6
|
-
@key = 'mock-redis-test:xread'
|
7
|
-
@key1 = 'mock-redis-test:xread1'
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'reads a single entry' do
|
11
|
-
@redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
|
12
|
-
expect(@redises.xread(@key, '0-0'))
|
13
|
-
.to eq({ @key => [['1234567891234-0', { 'key' => 'value' }]] })
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'reads multiple entries from the beginning of the stream' do
|
17
|
-
@redises.xadd(@key, { key0: 'value0' }, id: '1234567891234-0')
|
18
|
-
@redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-1')
|
19
|
-
expect(@redises.xread(@key, '0-0'))
|
20
|
-
.to eq({ @key => [['1234567891234-0', { 'key0' => 'value0' }],
|
21
|
-
['1234567891234-1', { 'key1' => 'value1' }]] })
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'reads entries greater than the ID passed' do
|
25
|
-
@redises.xadd(@key, { key0: 'value0' }, id: '1234567891234-0')
|
26
|
-
@redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-1')
|
27
|
-
expect(@redises.xread(@key, '1234567891234-0'))
|
28
|
-
.to eq({ @key => [['1234567891234-1', { 'key1' => 'value1' }]] })
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'reads from multiple streams' do
|
32
|
-
@redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
|
33
|
-
@redises.xadd(@key1, { key1: 'value1' }, id: '1234567891234-0')
|
34
|
-
expect(@redises.xread([@key, @key1], %w[0-0 0-0]))
|
35
|
-
.to eq({ @key => [['1234567891234-0', { 'key' => 'value' }]],
|
36
|
-
@key1 => [['1234567891234-0', { 'key1' => 'value1' }]] })
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'reads from multiple streams at the given IDs' do
|
40
|
-
@redises.xadd(@key, { key: 'value0' }, id: '1234567891234-0')
|
41
|
-
@redises.xadd(@key, { key: 'value1' }, id: '1234567891234-1')
|
42
|
-
@redises.xadd(@key, { key: 'value2' }, id: '1234567891234-2')
|
43
|
-
@redises.xadd(@key1, { key1: 'value0' }, id: '1234567891234-0')
|
44
|
-
@redises.xadd(@key1, { key1: 'value1' }, id: '1234567891234-1')
|
45
|
-
@redises.xadd(@key1, { key1: 'value2' }, id: '1234567891234-2')
|
46
|
-
# The first stream won't return anything since we specify the last ID
|
47
|
-
expect(@redises.xread([@key, @key1], %w[1234567891234-2 1234567891234-1]))
|
48
|
-
.to eq({ @key1 => [['1234567891234-2', { 'key1' => 'value2' }]] })
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'supports the block parameter' do
|
52
|
-
@redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
|
53
|
-
expect(@redises.xread(@key, '0-0', block: 1000))
|
54
|
-
.to eq({ @key => [['1234567891234-0', { 'key' => 'value' }]] })
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'limits results with count' do
|
58
|
-
@redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
|
59
|
-
@redises.xadd(@key, { key: 'value' }, id: '1234567891234-1')
|
60
|
-
@redises.xadd(@key, { key: 'value' }, id: '1234567891234-2')
|
61
|
-
expect(@redises.xread(@key, '0-0', count: 1))
|
62
|
-
.to eq({ @key => [['1234567891234-0', { 'key' => 'value' }]] })
|
63
|
-
expect(@redises.xread(@key, '1234567891234-0', count: 1))
|
64
|
-
.to eq({ @key => [['1234567891234-1', { 'key' => 'value' }]] })
|
65
|
-
end
|
66
|
-
end
|
@@ -1,130 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#xrevrange(key, start, end)' do
|
4
|
-
before { @key = 'mock-redis-test:xrevrange' }
|
5
|
-
|
6
|
-
it 'finds an empty range' do
|
7
|
-
expect(@redises.xrevrange(@key, '-', '+')).to eq []
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'finds a single entry with a full range' do
|
11
|
-
@redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
|
12
|
-
expect(@redises.xrevrange(@key, '+', '-'))
|
13
|
-
.to eq [['1234567891234-0', { 'key' => 'value' }]]
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'finds multiple key/value pairs with a full range' do
|
17
|
-
@redises.xadd(@key, { key1: 'value1', key2: 'value2', key3: 'value3' }, id: '1234567891234-0')
|
18
|
-
expect(@redises.xrevrange(@key, '+', '-'))
|
19
|
-
.to eq [['1234567891234-0', { 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }]]
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'six items on the list' do
|
23
|
-
before :each do
|
24
|
-
@redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-0')
|
25
|
-
@redises.xadd(@key, { key2: 'value2' }, id: '1234567891245-0')
|
26
|
-
@redises.xadd(@key, { key3: 'value3' }, id: '1234567891245-1')
|
27
|
-
@redises.xadd(@key, { key4: 'value4' }, id: '1234567891278-0')
|
28
|
-
@redises.xadd(@key, { key5: 'value5' }, id: '1234567891278-1')
|
29
|
-
@redises.xadd(@key, { key6: 'value6' }, id: '1234567891299-0')
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'returns entries in sequential order' do
|
33
|
-
expect(@redises.xrevrange(@key, '+', '-')).to eq(
|
34
|
-
[
|
35
|
-
['1234567891299-0', { 'key6' => 'value6' }],
|
36
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
37
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
38
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
39
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
40
|
-
['1234567891234-0', { 'key1' => 'value1' }],
|
41
|
-
]
|
42
|
-
)
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'returns entries with a lower limit' do
|
46
|
-
expect(@redises.xrevrange(@key, '+', '1234567891239-0')).to eq(
|
47
|
-
[
|
48
|
-
['1234567891299-0', { 'key6' => 'value6' }],
|
49
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
50
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
51
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
52
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
53
|
-
]
|
54
|
-
)
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'returns entries with an upper limit' do
|
58
|
-
expect(@redises.xrevrange(@key, '1234567891285-0', '-')).to eq(
|
59
|
-
[
|
60
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
61
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
62
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
63
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
64
|
-
['1234567891234-0', { 'key1' => 'value1' }],
|
65
|
-
]
|
66
|
-
)
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'returns entries with both a lower and an upper limit' do
|
70
|
-
expect(@redises.xrevrange(@key, '1234567891285-0', '1234567891239-0')).to eq(
|
71
|
-
[
|
72
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
73
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
74
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
75
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
76
|
-
]
|
77
|
-
)
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'finds the list with sequence numbers' do
|
81
|
-
expect(@redises.xrevrange(@key, '1234567891278-0', '1234567891245-1')).to eq(
|
82
|
-
[
|
83
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
84
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
85
|
-
]
|
86
|
-
)
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'finds the list with lower bound without sequence numbers' do
|
90
|
-
expect(@redises.xrevrange(@key, '+', '1234567891245')).to eq(
|
91
|
-
[
|
92
|
-
['1234567891299-0', { 'key6' => 'value6' }],
|
93
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
94
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
95
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
96
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
97
|
-
]
|
98
|
-
)
|
99
|
-
end
|
100
|
-
|
101
|
-
it 'finds the list with upper bound without sequence numbers' do
|
102
|
-
expect(@redises.xrevrange(@key, '1234567891278', '-')).to eq(
|
103
|
-
[
|
104
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
105
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
106
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
107
|
-
['1234567891245-0', { 'key2' => 'value2' }],
|
108
|
-
['1234567891234-0', { 'key1' => 'value1' }],
|
109
|
-
]
|
110
|
-
)
|
111
|
-
end
|
112
|
-
|
113
|
-
it 'returns a limited number of items' do
|
114
|
-
expect(@redises.xrevrange(@key, count: 2)).to eq(
|
115
|
-
[
|
116
|
-
['1234567891299-0', { 'key6' => 'value6' }],
|
117
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
118
|
-
]
|
119
|
-
)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'raises an invalid stream id error' do
|
124
|
-
expect { @redises.xrevrange(@key, 'X', '-') }
|
125
|
-
.to raise_error(
|
126
|
-
Redis::CommandError,
|
127
|
-
'ERR Invalid stream ID specified as stream command argument'
|
128
|
-
)
|
129
|
-
end
|
130
|
-
end
|
data/spec/commands/xtrim_spec.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#xtrim("mystream", 1000, approximate: true)' do
|
4
|
-
before { @key = 'mock-redis-test:xtrim' }
|
5
|
-
|
6
|
-
before :each do
|
7
|
-
@redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-0')
|
8
|
-
@redises.xadd(@key, { key2: 'value2' }, id: '1234567891245-0')
|
9
|
-
@redises.xadd(@key, { key3: 'value3' }, id: '1234567891245-1')
|
10
|
-
@redises.xadd(@key, { key4: 'value4' }, id: '1234567891278-0')
|
11
|
-
@redises.xadd(@key, { key5: 'value5' }, id: '1234567891278-1')
|
12
|
-
@redises.xadd(@key, { key6: 'value6' }, id: '1234567891299-0')
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'returns the number of elements deleted' do
|
16
|
-
expect(@redises.xtrim(@key, 4)).to eq 2
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'returns 0 if count is greater than size' do
|
20
|
-
initial = @redises.xrange(@key, '-', '+')
|
21
|
-
expect(@redises.xtrim(@key, 1000)).to eq 0
|
22
|
-
expect(@redises.xrange(@key, '-', '+')).to eql(initial)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'deletes the oldes elements' do
|
26
|
-
@redises.xtrim(@key, 4)
|
27
|
-
expect(@redises.xrange(@key, '-', '+')).to eq(
|
28
|
-
[
|
29
|
-
['1234567891245-1', { 'key3' => 'value3' }],
|
30
|
-
['1234567891278-0', { 'key4' => 'value4' }],
|
31
|
-
['1234567891278-1', { 'key5' => 'value5' }],
|
32
|
-
['1234567891299-0', { 'key6' => 'value6' }]
|
33
|
-
]
|
34
|
-
)
|
35
|
-
end
|
36
|
-
end
|
data/spec/commands/zadd_spec.rb
DELETED
@@ -1,129 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#zadd(key, score, member)' do
|
4
|
-
before { @key = 'mock-redis-test:zadd' }
|
5
|
-
|
6
|
-
it "returns true if member wasn't present in the set" do
|
7
|
-
@redises.zadd(@key, 1, 'foo').should == true
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'returns false if member was present in the set' do
|
11
|
-
@redises.zadd(@key, 1, 'foo')
|
12
|
-
@redises.zadd(@key, 1, 'foo').should == false
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'adds member to the set' do
|
16
|
-
@redises.zadd(@key, 1, 'foo')
|
17
|
-
@redises.zrange(@key, 0, -1).should == ['foo']
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'treats integer members as strings' do
|
21
|
-
member = 11
|
22
|
-
@redises.zadd(@key, 1, member)
|
23
|
-
@redises.zrange(@key, 0, -1).should == [member.to_s]
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'allows scores to be set to Float::INFINITY' do
|
27
|
-
member = '1'
|
28
|
-
@redises.zadd(@key, Float::INFINITY, member)
|
29
|
-
@redises.zrange(@key, 0, -1).should == [member]
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'updates the score' do
|
33
|
-
@redises.zadd(@key, 1, 'foo')
|
34
|
-
@redises.zadd(@key, 2, 'foo')
|
35
|
-
|
36
|
-
@redises.zscore(@key, 'foo').should == 2.0
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'with XX option command do nothing if element not exist' do
|
40
|
-
@redises.zadd(@key, 1, 'foo')
|
41
|
-
@redises.zadd(@key, 2, 'bar', xx: true)
|
42
|
-
@redises.zrange(@key, 0, -1).should_not include 'bar'
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'with XX option command update index on exist element' do
|
46
|
-
@redises.zadd(@key, 1, 'foo')
|
47
|
-
@redises.zadd(@key, 2, 'foo', xx: true)
|
48
|
-
@redises.zscore(@key, 'foo').should == 2.0
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'with XX option and multiple elements command update index on exist element' do
|
52
|
-
@redises.zadd(@key, 1, 'foo')
|
53
|
-
added_count = @redises.zadd(@key, [[2, 'foo'], [2, 'bar']], xx: true)
|
54
|
-
added_count.should == 0
|
55
|
-
|
56
|
-
@redises.zscore(@key, 'foo').should == 2.0
|
57
|
-
@redises.zrange(@key, 0, -1).should_not include 'bar'
|
58
|
-
end
|
59
|
-
|
60
|
-
it "with NX option don't update current element" do
|
61
|
-
@redises.zadd(@key, 1, 'foo')
|
62
|
-
@redises.zadd(@key, 2, 'foo', nx: true)
|
63
|
-
@redises.zscore(@key, 'foo').should == 1.0
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'with NX option create new element' do
|
67
|
-
@redises.zadd(@key, 1, 'foo')
|
68
|
-
@redises.zadd(@key, 2, 'bar', nx: true)
|
69
|
-
@redises.zrange(@key, 0, -1).should include 'bar'
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'with NX option and multiple elements command only create element' do
|
73
|
-
@redises.zadd(@key, 1, 'foo')
|
74
|
-
added_count = @redises.zadd(@key, [[2, 'foo'], [2, 'bar']], nx: true)
|
75
|
-
added_count.should == 1
|
76
|
-
@redises.zscore(@key, 'bar').should == 2.0
|
77
|
-
@redises.zrange(@key, 0, -1).should eq %w[foo bar]
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'XX and NX options in same time raise error' do
|
81
|
-
lambda do
|
82
|
-
@redises.zadd(@key, 1, 'foo', nx: true, xx: true)
|
83
|
-
end.should raise_error(Redis::CommandError)
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'with INCR is act like zincrby' do
|
87
|
-
@redises.zadd(@key, 10, 'bert', incr: true).should == 10.0
|
88
|
-
@redises.zadd(@key, 3, 'bert', incr: true).should == 13.0
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'with INCR and XX not create element' do
|
92
|
-
@redises.zadd(@key, 10, 'bert', xx: true, incr: true).should be_nil
|
93
|
-
end
|
94
|
-
|
95
|
-
it 'with INCR and XX increase score for exist element' do
|
96
|
-
@redises.zadd(@key, 2, 'bert')
|
97
|
-
@redises.zadd(@key, 10, 'bert', xx: true, incr: true).should == 12.0
|
98
|
-
end
|
99
|
-
|
100
|
-
it 'with INCR and NX create element with score' do
|
101
|
-
@redises.zadd(@key, 11, 'bert', nx: true, incr: true).should == 11.0
|
102
|
-
end
|
103
|
-
|
104
|
-
it 'with INCR and NX not update element' do
|
105
|
-
@redises.zadd(@key, 1, 'bert')
|
106
|
-
@redises.zadd(@key, 10, 'bert', nx: true, incr: true).should be_nil
|
107
|
-
end
|
108
|
-
|
109
|
-
it 'with INCR with variable number of arguments raise error' do
|
110
|
-
lambda do
|
111
|
-
@redises.zadd(@key, [[1, 'one'], [2, 'two']], incr: true)
|
112
|
-
end.should raise_error(Redis::CommandError)
|
113
|
-
end
|
114
|
-
|
115
|
-
it 'supports a variable number of arguments' do
|
116
|
-
@redises.zadd(@key, [[1, 'one'], [2, 'two']])
|
117
|
-
@redises.zadd(@key, [[3, 'three']])
|
118
|
-
@redises.zrange(@key, 0, -1).should == %w[one two three]
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'raises an error if an empty array is given' do
|
122
|
-
lambda do
|
123
|
-
@redises.zadd(@key, [])
|
124
|
-
end.should raise_error(Redis::CommandError)
|
125
|
-
end
|
126
|
-
|
127
|
-
it_should_behave_like 'arg 1 is a score'
|
128
|
-
it_should_behave_like 'a zset-only command'
|
129
|
-
end
|