ryansch-mock_redis 0.2.0.1
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/.gitignore +4 -0
- data/.rspec +1 -0
- data/CHANGELOG.md +20 -0
- data/Gemfile +9 -0
- data/LICENSE +19 -0
- data/README.md +94 -0
- data/Rakefile +10 -0
- data/lib/mock_redis.rb +32 -0
- data/lib/mock_redis/assertions.rb +13 -0
- data/lib/mock_redis/database.rb +432 -0
- data/lib/mock_redis/exceptions.rb +3 -0
- data/lib/mock_redis/expire_wrapper.rb +25 -0
- data/lib/mock_redis/hash_methods.rb +102 -0
- data/lib/mock_redis/list_methods.rb +187 -0
- data/lib/mock_redis/multi_db_wrapper.rb +86 -0
- data/lib/mock_redis/set_methods.rb +125 -0
- data/lib/mock_redis/string_methods.rb +195 -0
- data/lib/mock_redis/transaction_wrapper.rb +80 -0
- data/lib/mock_redis/undef_redis_methods.rb +11 -0
- data/lib/mock_redis/utility_methods.rb +22 -0
- data/lib/mock_redis/version.rb +3 -0
- data/lib/mock_redis/zset.rb +110 -0
- data/lib/mock_redis/zset_methods.rb +209 -0
- data/mock_redis.gemspec +24 -0
- data/spec/cloning_spec.rb +96 -0
- data/spec/commands/append_spec.rb +24 -0
- data/spec/commands/auth_spec.rb +7 -0
- data/spec/commands/bgrewriteaof_spec.rb +7 -0
- data/spec/commands/bgsave_spec.rb +7 -0
- data/spec/commands/blpop_spec.rb +55 -0
- data/spec/commands/brpop_spec.rb +54 -0
- data/spec/commands/brpoplpush_spec.rb +53 -0
- data/spec/commands/dbsize_spec.rb +18 -0
- data/spec/commands/decr_spec.rb +34 -0
- data/spec/commands/decrby_spec.rb +34 -0
- data/spec/commands/del_spec.rb +20 -0
- data/spec/commands/echo_spec.rb +11 -0
- data/spec/commands/exists_spec.rb +14 -0
- data/spec/commands/expire_spec.rb +83 -0
- data/spec/commands/expireat_spec.rb +48 -0
- data/spec/commands/flushall_spec.rb +38 -0
- data/spec/commands/flushdb_spec.rb +38 -0
- data/spec/commands/get_spec.rb +23 -0
- data/spec/commands/getbit_spec.rb +34 -0
- data/spec/commands/getrange_spec.rb +22 -0
- data/spec/commands/getset_spec.rb +23 -0
- data/spec/commands/hdel_spec.rb +35 -0
- data/spec/commands/hexists_spec.rb +22 -0
- data/spec/commands/hget_spec.rb +23 -0
- data/spec/commands/hgetall_spec.rb +22 -0
- data/spec/commands/hincrby_spec.rb +52 -0
- data/spec/commands/hkeys_spec.rb +19 -0
- data/spec/commands/hlen_spec.rb +19 -0
- data/spec/commands/hmget_spec.rb +30 -0
- data/spec/commands/hmset_spec.rb +43 -0
- data/spec/commands/hset_spec.rb +23 -0
- data/spec/commands/hsetnx_spec.rb +39 -0
- data/spec/commands/hvals_spec.rb +19 -0
- data/spec/commands/incr_spec.rb +34 -0
- data/spec/commands/incrby_spec.rb +44 -0
- data/spec/commands/info_spec.rb +13 -0
- data/spec/commands/keys_spec.rb +87 -0
- data/spec/commands/lastsave_spec.rb +8 -0
- data/spec/commands/lindex_spec.rb +39 -0
- data/spec/commands/linsert_spec.rb +68 -0
- data/spec/commands/llen_spec.rb +16 -0
- data/spec/commands/lpop_spec.rb +34 -0
- data/spec/commands/lpush_spec.rb +30 -0
- data/spec/commands/lpushx_spec.rb +33 -0
- data/spec/commands/lrange_spec.rb +35 -0
- data/spec/commands/lrem_spec.rb +79 -0
- data/spec/commands/lset_spec.rb +38 -0
- data/spec/commands/ltrim_spec.rb +35 -0
- data/spec/commands/mget_spec.rb +34 -0
- data/spec/commands/move_spec.rb +147 -0
- data/spec/commands/mset_spec.rb +29 -0
- data/spec/commands/msetnx_spec.rb +40 -0
- data/spec/commands/persist_spec.rb +49 -0
- data/spec/commands/ping_spec.rb +7 -0
- data/spec/commands/quit_spec.rb +7 -0
- data/spec/commands/randomkey_spec.rb +20 -0
- data/spec/commands/rename_spec.rb +31 -0
- data/spec/commands/renamenx_spec.rb +36 -0
- data/spec/commands/rpop_spec.rb +34 -0
- data/spec/commands/rpoplpush_spec.rb +45 -0
- data/spec/commands/rpush_spec.rb +30 -0
- data/spec/commands/rpushx_spec.rb +33 -0
- data/spec/commands/sadd_spec.rb +22 -0
- data/spec/commands/save_spec.rb +7 -0
- data/spec/commands/scard_spec.rb +18 -0
- data/spec/commands/sdiff_spec.rb +47 -0
- data/spec/commands/sdiffstore_spec.rb +58 -0
- data/spec/commands/select_spec.rb +53 -0
- data/spec/commands/set_spec.rb +7 -0
- data/spec/commands/setbit_spec.rb +46 -0
- data/spec/commands/setex_spec.rb +22 -0
- data/spec/commands/setnx_spec.rb +25 -0
- data/spec/commands/setrange_spec.rb +30 -0
- data/spec/commands/sinter_spec.rb +41 -0
- data/spec/commands/sinterstore_spec.rb +53 -0
- data/spec/commands/sismember_spec.rb +29 -0
- data/spec/commands/smembers_spec.rb +18 -0
- data/spec/commands/smove_spec.rb +41 -0
- data/spec/commands/spop_spec.rb +25 -0
- data/spec/commands/srandmember_spec.rb +25 -0
- data/spec/commands/srem_spec.rb +35 -0
- data/spec/commands/strlen_spec.rb +19 -0
- data/spec/commands/sunion_spec.rb +40 -0
- data/spec/commands/sunionstore_spec.rb +53 -0
- data/spec/commands/ttl_spec.rb +36 -0
- data/spec/commands/type_spec.rb +36 -0
- data/spec/commands/unwatch_spec.rb +7 -0
- data/spec/commands/watch_spec.rb +7 -0
- data/spec/commands/zadd_spec.rb +29 -0
- data/spec/commands/zcard_spec.rb +19 -0
- data/spec/commands/zcount_spec.rb +23 -0
- data/spec/commands/zincrby_spec.rb +24 -0
- data/spec/commands/zinterstore_spec.rb +96 -0
- data/spec/commands/zrange_spec.rb +31 -0
- data/spec/commands/zrangebyscore_spec.rb +68 -0
- data/spec/commands/zrank_spec.rb +23 -0
- data/spec/commands/zrem_spec.rb +25 -0
- data/spec/commands/zremrangebyrank_spec.rb +22 -0
- data/spec/commands/zremrangebyscore_spec.rb +28 -0
- data/spec/commands/zrevrange_spec.rb +31 -0
- data/spec/commands/zrevrangebyscore_spec.rb +47 -0
- data/spec/commands/zrevrank_spec.rb +23 -0
- data/spec/commands/zscore_spec.rb +16 -0
- data/spec/commands/zunionstore_spec.rb +104 -0
- data/spec/spec_helper.rb +44 -0
- data/spec/support/redis_multiplexer.rb +91 -0
- data/spec/support/shared_examples/only_operates_on_hashes.rb +13 -0
- data/spec/support/shared_examples/only_operates_on_lists.rb +13 -0
- data/spec/support/shared_examples/only_operates_on_sets.rb +13 -0
- data/spec/support/shared_examples/only_operates_on_strings.rb +13 -0
- data/spec/support/shared_examples/only_operates_on_zsets.rb +57 -0
- data/spec/transactions_spec.rb +96 -0
- metadata +361 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zcard(key)" do
|
4
|
+
before do
|
5
|
+
@key = 'mock-redis-test:zcard'
|
6
|
+
end
|
7
|
+
|
8
|
+
it "returns the number of elements in the zset" do
|
9
|
+
@redises.zadd(@key, 1, 'Washington')
|
10
|
+
@redises.zadd(@key, 2, 'Adams')
|
11
|
+
@redises.zcard(@key).should == 2
|
12
|
+
end
|
13
|
+
|
14
|
+
it "returns 0 for nonexistent sets" do
|
15
|
+
@redises.zcard(@key).should == 0
|
16
|
+
end
|
17
|
+
|
18
|
+
it_should_behave_like "a zset-only command"
|
19
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zcount(key, min, max)" do
|
4
|
+
before do
|
5
|
+
@key = 'mock-redis-test:zcount'
|
6
|
+
@redises.zadd(@key, 1, 'Washington')
|
7
|
+
@redises.zadd(@key, 2, 'Adams')
|
8
|
+
@redises.zadd(@key, 3, 'Jefferson')
|
9
|
+
@redises.zadd(@key, 4, 'Madison')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns the number of members in the zset with scores in (min..max)" do
|
13
|
+
@redises.zcount(@key, 3, 10).should == 2
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns 0 if there are no such members" do
|
17
|
+
@redises.zcount(@key, 100, 200).should == 0
|
18
|
+
end
|
19
|
+
|
20
|
+
it_should_behave_like "arg 1 is a score"
|
21
|
+
it_should_behave_like "arg 2 is a score"
|
22
|
+
it_should_behave_like "a zset-only command"
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zincrby(key, increment, member)" do
|
4
|
+
before do
|
5
|
+
@key = 'mock-redis-test:zincrby'
|
6
|
+
@redises.zadd(@key, 1, 'bert')
|
7
|
+
end
|
8
|
+
|
9
|
+
it "returns the new score as a string" do
|
10
|
+
@redises.zincrby(@key, 10, 'bert').should == "11"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "updates the item's score" do
|
14
|
+
@redises.zincrby(@key, 10, 'bert')
|
15
|
+
@redises.zscore(@key, 'bert').should == "11"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "adds missing members with score increment" do
|
19
|
+
@redises.zincrby(@key, 5.5, 'bigbird').should == "5.5"
|
20
|
+
end
|
21
|
+
|
22
|
+
it_should_behave_like "arg 1 is a score"
|
23
|
+
it_should_behave_like "a zset-only command"
|
24
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zinterstore(destination, keys, [:weights => [w,w,], [:aggregate => :sum|:min|:max])" do
|
4
|
+
before do
|
5
|
+
@odds = 'mock-redis-test:zinterstore:odds'
|
6
|
+
@primes = 'mock-redis-test:zinterstore:primes'
|
7
|
+
@dest = 'mock-redis-test:zinterstore:dest'
|
8
|
+
|
9
|
+
@redises.zadd(@odds, 1, 'one')
|
10
|
+
@redises.zadd(@odds, 3, 'three')
|
11
|
+
@redises.zadd(@odds, 5, 'five')
|
12
|
+
@redises.zadd(@odds, 7, 'seven')
|
13
|
+
@redises.zadd(@odds, 9, 'nine')
|
14
|
+
|
15
|
+
@redises.zadd(@primes, 2, 'two')
|
16
|
+
@redises.zadd(@primes, 3, 'three')
|
17
|
+
@redises.zadd(@primes, 5, 'five')
|
18
|
+
@redises.zadd(@primes, 7, 'seven')
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns the number of elements in the new set" do
|
22
|
+
@redises.zinterstore(@dest, [@odds, @primes]).should == 3
|
23
|
+
end
|
24
|
+
|
25
|
+
it "sums the members' scores by default" do
|
26
|
+
@redises.zinterstore(@dest, [@odds, @primes])
|
27
|
+
@redises.zrange(@dest, 0, -1, :with_scores => true).should ==
|
28
|
+
%w[three 6 five 10 seven 14]
|
29
|
+
end
|
30
|
+
|
31
|
+
it "removes existing elements in destination" do
|
32
|
+
@redises.zadd(@dest, 10, 'ten')
|
33
|
+
|
34
|
+
@redises.zinterstore(@dest, [@primes])
|
35
|
+
@redises.zrange(@dest, 0, -1, :with_scores => true).should ==
|
36
|
+
%w[two 2 three 3 five 5 seven 7]
|
37
|
+
end
|
38
|
+
|
39
|
+
it "raises an error if keys is empty" do
|
40
|
+
lambda do
|
41
|
+
@redises.zinterstore(@dest, [])
|
42
|
+
end.should raise_error(RuntimeError)
|
43
|
+
end
|
44
|
+
|
45
|
+
context "the :weights argument" do
|
46
|
+
it "multiplies the scores by the weights while aggregating" do
|
47
|
+
@redises.zinterstore(@dest, [@odds, @primes], :weights => [2, 3])
|
48
|
+
@redises.zrange(@dest, 0, -1, :with_scores => true).should ==
|
49
|
+
%w[three 15 five 25 seven 35]
|
50
|
+
end
|
51
|
+
|
52
|
+
it "raises an error if the number of weights != the number of keys" do
|
53
|
+
lambda do
|
54
|
+
@redises.zinterstore(@dest, [@odds, @primes], :weights => [1,2,3])
|
55
|
+
end.should raise_error(RuntimeError)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "the :aggregate argument" do
|
60
|
+
before do
|
61
|
+
@smalls = 'mock-redis-test:zinterstore:smalls'
|
62
|
+
@bigs = 'mock-redis-test:zinterstore:bigs'
|
63
|
+
|
64
|
+
@redises.zadd(@smalls, 1, 'bert')
|
65
|
+
@redises.zadd(@smalls, 2, 'ernie')
|
66
|
+
@redises.zadd(@bigs, 100, 'bert')
|
67
|
+
@redises.zadd(@bigs, 200, 'ernie')
|
68
|
+
end
|
69
|
+
|
70
|
+
it "aggregates scores with min when :aggregate => :min is specified" do
|
71
|
+
@redises.zinterstore(@dest, [@bigs, @smalls], :aggregate => :min)
|
72
|
+
@redises.zrange(@dest, 0, -1, :with_scores => true).should ==
|
73
|
+
%w[bert 1 ernie 2]
|
74
|
+
end
|
75
|
+
|
76
|
+
it "aggregates scores with max when :aggregate => :max is specified" do
|
77
|
+
@redises.zinterstore(@dest, [@bigs, @smalls], :aggregate => :max)
|
78
|
+
@redises.zrange(@dest, 0, -1, :with_scores => true).should ==
|
79
|
+
%w[bert 100 ernie 200]
|
80
|
+
end
|
81
|
+
|
82
|
+
it "allows 'min', 'MIN', etc. as aliases for :min" do
|
83
|
+
@redises.zinterstore(@dest, [@bigs, @smalls], :aggregate => 'min')
|
84
|
+
@redises.zscore(@dest, 'bert').should == '1'
|
85
|
+
|
86
|
+
@redises.zinterstore(@dest, [@bigs, @smalls], :aggregate => 'MIN')
|
87
|
+
@redises.zscore(@dest, 'bert').should == '1'
|
88
|
+
end
|
89
|
+
|
90
|
+
it "raises an error for unknown aggregation function" do
|
91
|
+
lambda do
|
92
|
+
@redises.zinterstore(@dest, [@bigs, @smalls], :aggregate => :mix)
|
93
|
+
end.should raise_error(RuntimeError)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zrange(key, start, stop [, :with_scores => true])" do
|
4
|
+
before do
|
5
|
+
@key = 'mock-redis-test:zrange'
|
6
|
+
@redises.zadd(@key, 1, 'Washington')
|
7
|
+
@redises.zadd(@key, 2, 'Adams')
|
8
|
+
@redises.zadd(@key, 3, 'Jefferson')
|
9
|
+
@redises.zadd(@key, 4, 'Madison')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns the elements in order by score" do
|
13
|
+
@redises.zrange(@key, 0, 1).should == ['Washington', 'Adams']
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns the elements in order by score (negative indices)" do
|
17
|
+
@redises.zrange(@key, -2, -1).should == ['Jefferson', 'Madison']
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns the scores when :with_scores is specified" do
|
21
|
+
@redises.zrange(@key, 0, 1, :with_scores => true).
|
22
|
+
should == ["Washington", "1", "Adams", "2"]
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns the scores when :withscores is specified" do
|
26
|
+
@redises.zrange(@key, 0, 1, :withscores => true).
|
27
|
+
should == ["Washington", "1", "Adams", "2"]
|
28
|
+
end
|
29
|
+
|
30
|
+
it_should_behave_like "a zset-only command"
|
31
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zrangebyscore(key, start, stop [:with_scores => true] [:limit => [offset count]])" do
|
4
|
+
before do
|
5
|
+
@key = 'mock-redis-test:zrangebyscore'
|
6
|
+
@redises.zadd(@key, 1, 'Washington')
|
7
|
+
@redises.zadd(@key, 2, 'Adams')
|
8
|
+
@redises.zadd(@key, 3, 'Jefferson')
|
9
|
+
@redises.zadd(@key, 4, 'Madison')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns the elements in order by score" do
|
13
|
+
@redises.zrangebyscore(@key, 1, 2).should == ['Washington', 'Adams']
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns the scores when :with_scores is specified" do
|
17
|
+
@redises.zrangebyscore(@key, 1, 2, :with_scores => true).
|
18
|
+
should == ["Washington", "1", "Adams", "2"]
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns the scores when :withscores is specified" do
|
22
|
+
@redises.zrangebyscore(@key, 1, 2, :withscores => true).
|
23
|
+
should == ["Washington", "1", "Adams", "2"]
|
24
|
+
end
|
25
|
+
|
26
|
+
it "honors the :limit => [offset count] argument" do
|
27
|
+
@redises.zrangebyscore(@key, -100, 100, :limit => [1, 2]).
|
28
|
+
should == ["Adams", "Jefferson"]
|
29
|
+
end
|
30
|
+
|
31
|
+
it "raises an error if :limit isn't a 2-tuple" do
|
32
|
+
lambda do
|
33
|
+
@redises.zrangebyscore(@key, -100, 100, :limit => [1, 2, 3])
|
34
|
+
end.should raise_error(RuntimeError)
|
35
|
+
|
36
|
+
lambda do
|
37
|
+
@redises.zrangebyscore(@key, -100, 100, :limit => "1, 2")
|
38
|
+
end.should raise_error(RuntimeError)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "treats scores like floats, not strings" do
|
42
|
+
@redises.zadd(@key, "10", "Tyler")
|
43
|
+
@redises.zrangebyscore(@key, 1, 2).should == ['Washington', 'Adams']
|
44
|
+
end
|
45
|
+
|
46
|
+
it "treats -inf as negative infinity" do
|
47
|
+
@redises.zrangebyscore(@key, "-inf", 3).should ==
|
48
|
+
["Washington", "Adams", "Jefferson"]
|
49
|
+
end
|
50
|
+
|
51
|
+
it "treats +inf as positive infinity" do
|
52
|
+
@redises.zrangebyscore(@key, 3, "+inf").should == ["Jefferson", "Madison"]
|
53
|
+
end
|
54
|
+
|
55
|
+
it "treats +inf as positive infinity" do
|
56
|
+
@redises.zrangebyscore(@key, 3, "+inf").should == ["Jefferson", "Madison"]
|
57
|
+
end
|
58
|
+
|
59
|
+
it "honors exclusive ranges on the left" do
|
60
|
+
@redises.zrangebyscore(@key, "(3", 4).should == ["Madison"]
|
61
|
+
end
|
62
|
+
|
63
|
+
it "honors exclusive ranges on the right" do
|
64
|
+
@redises.zrangebyscore(@key, "3", "(4").should == ["Jefferson"]
|
65
|
+
end
|
66
|
+
|
67
|
+
it_should_behave_like "a zset-only command"
|
68
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zrank(key, member)" do
|
4
|
+
before do
|
5
|
+
@key = 'mock-redis-test:zrank'
|
6
|
+
|
7
|
+
@redises.zadd(@key, 1, 'one')
|
8
|
+
@redises.zadd(@key, 2, 'two')
|
9
|
+
@redises.zadd(@key, 3, 'three')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns nil if member wasn't present in the set" do
|
13
|
+
@redises.zrank(@key, 'foo').should be_nil
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns the index of the member in the set" do
|
17
|
+
@redises.zrank(@key, 'one').should == 0
|
18
|
+
@redises.zrank(@key, 'two').should == 1
|
19
|
+
@redises.zrank(@key, 'three').should == 2
|
20
|
+
end
|
21
|
+
|
22
|
+
it_should_behave_like "a zset-only command"
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zrem(key, member)" do
|
4
|
+
before do
|
5
|
+
@key = 'mock-redis-test:zrem'
|
6
|
+
|
7
|
+
@redises.zadd(@key, 1, 'one')
|
8
|
+
@redises.zadd(@key, 2, 'two')
|
9
|
+
end
|
10
|
+
|
11
|
+
it "returns true if member is present in the set" do
|
12
|
+
@redises.zrem(@key, 'one').should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns false if member is not present in the set" do
|
16
|
+
@redises.zrem(@key, 'nobody home').should be_false
|
17
|
+
end
|
18
|
+
|
19
|
+
it "removes member from the set" do
|
20
|
+
@redises.zrem(@key, 'one')
|
21
|
+
@redises.zrange(@key, 0, -1).should == ['two']
|
22
|
+
end
|
23
|
+
|
24
|
+
it_should_behave_like "a zset-only command"
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zremrangebyrank(key, start, stop)" do
|
4
|
+
before do
|
5
|
+
@key = 'mock-redis-test:zremrangebyrank'
|
6
|
+
@redises.zadd(@key, 1, 'Washington')
|
7
|
+
@redises.zadd(@key, 2, 'Adams')
|
8
|
+
@redises.zadd(@key, 3, 'Jefferson')
|
9
|
+
@redises.zadd(@key, 4, 'Madison')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns the number of elements in range" do
|
13
|
+
@redises.zremrangebyrank(@key, 2, 3).should == 2
|
14
|
+
end
|
15
|
+
|
16
|
+
it "removes the elements" do
|
17
|
+
@redises.zremrangebyrank(@key, 2, 3)
|
18
|
+
@redises.zrange(@key, 0, -1).should == %w[Washington Adams]
|
19
|
+
end
|
20
|
+
|
21
|
+
it_should_behave_like "a zset-only command"
|
22
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zremrangebyscore(key, min, max)" do
|
4
|
+
before do
|
5
|
+
@key = 'mock-redis-test:zremrangebyscore'
|
6
|
+
@redises.zadd(@key, 1, 'Washington')
|
7
|
+
@redises.zadd(@key, 2, 'Adams')
|
8
|
+
@redises.zadd(@key, 3, 'Jefferson')
|
9
|
+
@redises.zadd(@key, 4, 'Madison')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns the number of elements in range" do
|
13
|
+
@redises.zremrangebyscore(@key, 2, 3).should == 2
|
14
|
+
end
|
15
|
+
|
16
|
+
it "removes the elements" do
|
17
|
+
@redises.zremrangebyscore(@key, 2, 3)
|
18
|
+
@redises.zrange(@key, 0, -1).should == %w[Washington Madison]
|
19
|
+
end
|
20
|
+
|
21
|
+
# As seen in http://redis.io/commands/zremrangebyscore
|
22
|
+
it "removes the elements for complex statements" do
|
23
|
+
@redises.zremrangebyscore(@key, '-inf', '(4')
|
24
|
+
@redises.zrange(@key, 0, -1).should == %w[Madison]
|
25
|
+
end
|
26
|
+
|
27
|
+
it_should_behave_like "a zset-only command"
|
28
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zrevrange(key, start, stop [, :with_scores => true])" do
|
4
|
+
before do
|
5
|
+
@key = 'mock-redis-test:zrevrange'
|
6
|
+
@redises.zadd(@key, 1, 'Washington')
|
7
|
+
@redises.zadd(@key, 2, 'Adams')
|
8
|
+
@redises.zadd(@key, 3, 'Jefferson')
|
9
|
+
@redises.zadd(@key, 4, 'Madison')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns the elements in order by score" do
|
13
|
+
@redises.zrevrange(@key, 0, 1).should == ['Madison', 'Jefferson']
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns the elements in order by score (negative indices)" do
|
17
|
+
@redises.zrevrange(@key, -2, -1).should == ['Adams', 'Washington']
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns the scores when :with_scores is specified" do
|
21
|
+
@redises.zrevrange(@key, 2, 3, :with_scores => true).
|
22
|
+
should == ["Adams", "2", "Washington", "1"]
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns the scores when :withscores is specified" do
|
26
|
+
@redises.zrevrange(@key, 2, 3, :withscores => true).
|
27
|
+
should == ["Adams", "2", "Washington", "1"]
|
28
|
+
end
|
29
|
+
|
30
|
+
it_should_behave_like "a zset-only command"
|
31
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "#zrevrangebyscore(key, start, stop [:with_scores => true] [:limit => [offset count]])" do
|
4
|
+
before do
|
5
|
+
@key = 'mock-redis-test:zrevrangebyscore'
|
6
|
+
@redises.zadd(@key, 1, 'Washington')
|
7
|
+
@redises.zadd(@key, 2, 'Adams')
|
8
|
+
@redises.zadd(@key, 3, 'Jefferson')
|
9
|
+
@redises.zadd(@key, 4, 'Madison')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns the elements in order by score" do
|
13
|
+
@redises.zrevrangebyscore(@key, 4, 3).should == ['Madison', 'Jefferson']
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns the scores when :with_scores is specified" do
|
17
|
+
@redises.zrevrangebyscore(@key, 4, 3, :with_scores => true).
|
18
|
+
should == %w[Madison 4 Jefferson 3]
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns the scores when :withscores is specified" do
|
22
|
+
@redises.zrevrangebyscore(@key, 4, 3, :withscores => true).
|
23
|
+
should == %w[Madison 4 Jefferson 3]
|
24
|
+
end
|
25
|
+
|
26
|
+
it "treats +inf as positive infinity" do
|
27
|
+
@redises.zrevrangebyscore(@key, "+inf", 3).
|
28
|
+
should == %w[Madison Jefferson]
|
29
|
+
end
|
30
|
+
|
31
|
+
it "honors the :limit => [offset count] argument" do
|
32
|
+
@redises.zrevrangebyscore(@key, 100, -100, :limit => [1, 2]).
|
33
|
+
should == ["Jefferson", "Adams"]
|
34
|
+
end
|
35
|
+
|
36
|
+
it "raises an error if :limit isn't a 2-tuple" do
|
37
|
+
lambda do
|
38
|
+
@redises.zrevrangebyscore(@key, 100, -100, :limit => [1, 2, 3])
|
39
|
+
end.should raise_error(RuntimeError)
|
40
|
+
|
41
|
+
lambda do
|
42
|
+
@redises.zrevrangebyscore(@key, 100, -100, :limit => "1, 2")
|
43
|
+
end.should raise_error(RuntimeError)
|
44
|
+
end
|
45
|
+
|
46
|
+
it_should_behave_like "a zset-only command"
|
47
|
+
end
|