mock_redis 0.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/Gemfile +9 -0
- data/LICENSE +19 -0
- data/README.md +88 -0
- data/Rakefile +10 -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 +48 -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 +75 -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 +80 -0
- data/lib/mock_redis/zset_methods.rb +210 -0
- data/lib/mock_redis.rb +32 -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/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 +51 -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 +46 -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 +46 -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 +88 -0
- data/spec/commands/zrange_spec.rb +31 -0
- data/spec/commands/zrangebyscore_spec.rb +42 -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 +21 -0
- data/spec/commands/zrevrange_spec.rb +31 -0
- data/spec/commands/zrevrangebyscore_spec.rb +42 -0
- data/spec/commands/zrevrank_spec.rb +23 -0
- data/spec/commands/zscore_spec.rb +16 -0
- data/spec/commands/zunionstore_spec.rb +96 -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 +73 -0
- metadata +358 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe '#hincrby(key, field, increment)' do
|
|
4
|
+
before do
|
|
5
|
+
@key = 'mock-redis-test:hincrby'
|
|
6
|
+
@field = 'count'
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "returns the value after the increment" do
|
|
10
|
+
@redises.hset(@key, @field, 2)
|
|
11
|
+
@redises.hincrby(@key, @field, 2).should == 4
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "treats a missing key like 0" do
|
|
15
|
+
@redises.hincrby(@key, @field, 1).should == 1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "creates a hash if nothing is present" do
|
|
19
|
+
@redises.hincrby(@key, @field, 1)
|
|
20
|
+
@redises.hget(@key, @field).should == "1"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "increments negative numbers" do
|
|
24
|
+
@redises.hset(@key, @field, -10)
|
|
25
|
+
@redises.hincrby(@key, @field, 2).should == -8
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "works multiple times" do
|
|
29
|
+
@redises.hincrby(@key, @field, 2).should == 2
|
|
30
|
+
@redises.hincrby(@key, @field, 2).should == 4
|
|
31
|
+
@redises.hincrby(@key, @field, 2).should == 6
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "accepts an integer-ish string" do
|
|
35
|
+
@redises.hincrby(@key, @field, "2").should == 2
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "raises an error if the value does not look like an integer" do
|
|
39
|
+
@redises.hset(@key, @field, "one")
|
|
40
|
+
lambda do
|
|
41
|
+
@redises.hincrby(@key, @field, 1)
|
|
42
|
+
end.should raise_error(RuntimeError)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "raises an error if the delta does not look like an integer" do
|
|
46
|
+
lambda do
|
|
47
|
+
@redises.hincrby(@key, @field, "foo")
|
|
48
|
+
end.should raise_error(RuntimeError)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it_should_behave_like "a hash-only command"
|
|
52
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#hkeys(key)" do
|
|
4
|
+
before do
|
|
5
|
+
@key = "mock-redis-test:hkeys"
|
|
6
|
+
@redises.hset(@key, 'k1', 'v1')
|
|
7
|
+
@redises.hset(@key, 'k2', 'v2')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "returns the keys stored in the hash" do
|
|
11
|
+
@redises.hkeys(@key).sort.should == %w[k1 k2]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "returns [] when there is no such key" do
|
|
15
|
+
@redises.hkeys('mock-redis-test:nonesuch').should == []
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it_should_behave_like "a hash-only command"
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#hlen(key)" do
|
|
4
|
+
before do
|
|
5
|
+
@key = "mock-redis-test:hlen"
|
|
6
|
+
@redises.hset(@key, 'k1', 'v1')
|
|
7
|
+
@redises.hset(@key, 'k2', 'v2')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "returns the number of keys stored in the hash" do
|
|
11
|
+
@redises.hlen(@key).should == 2
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "returns [] when there is no such key" do
|
|
15
|
+
@redises.hlen('mock-redis-test:nonesuch').should == 0
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it_should_behave_like "a hash-only command"
|
|
19
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#hmget(key, field [, field, ...])" do
|
|
4
|
+
before do
|
|
5
|
+
@key = "mock-redis-test:hmget"
|
|
6
|
+
@redises.hset(@key, 'k1', 'v1')
|
|
7
|
+
@redises.hset(@key, 'k2', 'v2')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "returns the values for those keys" do
|
|
11
|
+
@redises.hmget(@key, 'k1', 'k2').sort.should == %w[v1 v2]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "returns nils when there are no such fields" do
|
|
15
|
+
@redises.hmget(@key, 'k1', 'mock-redis-test:nonesuch').
|
|
16
|
+
should == ['v1', nil]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "returns nils when there is no such key" do
|
|
20
|
+
@redises.hmget(@key, 'mock-redis-test:nonesuch').should == [nil]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "raises an error if given no fields" do
|
|
24
|
+
lambda do
|
|
25
|
+
@redises.hmget(@key)
|
|
26
|
+
end.should raise_error(RuntimeError)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it_should_behave_like "a hash-only command"
|
|
30
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#hmset(key, field, value [, field, value ...])" do
|
|
4
|
+
before do
|
|
5
|
+
@key = "mock-redis-test:hmset"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "returns 'OK'" do
|
|
9
|
+
@redises.hmset(@key, 'k1', 'v1', 'k2', 'v2').should == "OK"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "sets the values" do
|
|
13
|
+
@redises.hmset(@key, 'k1', 'v1', 'k2', 'v2')
|
|
14
|
+
@redises.hmget(@key, 'k1', 'k2').should == %w[v1 v2]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "updates an existing hash" do
|
|
18
|
+
@redises.hset(@key, 'foo', 'bar')
|
|
19
|
+
@redises.hmset(@key, 'bert', 'ernie', 'diet', 'coke')
|
|
20
|
+
|
|
21
|
+
@redises.hmget(@key, 'foo', 'bert', 'diet').
|
|
22
|
+
should == %w[bar ernie coke]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "stores the values as strings" do
|
|
26
|
+
@redises.hmset(@key, 'one', 1)
|
|
27
|
+
@redises.hget(@key, 'one').should == "1"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "raises an error if given no fields or values" do
|
|
31
|
+
lambda do
|
|
32
|
+
@redises.hmset(@key)
|
|
33
|
+
end.should raise_error(RuntimeError)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "raises an error if given an odd number of fields+values" do
|
|
37
|
+
lambda do
|
|
38
|
+
@redises.hmset(@key, 'k1', 1, 'k2')
|
|
39
|
+
end.should raise_error(RuntimeError)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it_should_behave_like "a hash-only command"
|
|
43
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#hset(key, field)" do
|
|
4
|
+
before do
|
|
5
|
+
@key = "mock-redis-test:hset"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "returns true" do
|
|
9
|
+
@redises.hset(@key, 'k1', 'v1').should == true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "creates a hash there is no such field" do
|
|
13
|
+
@redises.hset(@key, 'k1', 'v1')
|
|
14
|
+
@redises.hget(@key, 'k1').should == 'v1'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "stores values as strings" do
|
|
18
|
+
@redises.hset(@key, "num", 1)
|
|
19
|
+
@redises.hget(@key, 'num').should == "1"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it_should_behave_like "a hash-only command"
|
|
23
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#hsetnx(key, field)" do
|
|
4
|
+
before do
|
|
5
|
+
@key = "mock-redis-test:hsetnx"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "returns true if the field is absent" do
|
|
9
|
+
@redises.hsetnx(@key, 'field', 'val').should be_true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "returns 0 if the field is present" do
|
|
13
|
+
@redises.hset(@key, 'field', 'val')
|
|
14
|
+
@redises.hsetnx(@key, 'field', 'val').should be_false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "leaves the field unchanged if the field is present" do
|
|
18
|
+
@redises.hset(@key, 'field', 'old')
|
|
19
|
+
@redises.hsetnx(@key, 'field', 'new')
|
|
20
|
+
@redises.hget(@key, 'field').should == 'old'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "sets the field if the field is absent" do
|
|
24
|
+
@redises.hsetnx(@key, 'field', 'new')
|
|
25
|
+
@redises.hget(@key, 'field').should == 'new'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "creates a hash if there is no such field" do
|
|
29
|
+
@redises.hsetnx(@key, 'field', 'val')
|
|
30
|
+
@redises.hget(@key, 'field').should == 'val'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "stores values as strings" do
|
|
34
|
+
@redises.hsetnx(@key, "num", 1)
|
|
35
|
+
@redises.hget(@key, 'num').should == "1"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it_should_behave_like "a hash-only command"
|
|
39
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#hvals(key)" do
|
|
4
|
+
before do
|
|
5
|
+
@key = "mock-redis-test:hvals"
|
|
6
|
+
@redises.hset(@key, 'k1', 'v1')
|
|
7
|
+
@redises.hset(@key, 'k2', 'v2')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "returns the values stored in the hash" do
|
|
11
|
+
@redises.hvals(@key).sort.should == %w[v1 v2]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "returns [] when there is no such key" do
|
|
15
|
+
@redises.hvals('mock-redis-test:nonesuch').should == []
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it_should_behave_like "a hash-only command"
|
|
19
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe '#incr(key)' do
|
|
4
|
+
before { @key = 'mock-redis-test:33888' }
|
|
5
|
+
|
|
6
|
+
it "returns the value after the increment" do
|
|
7
|
+
@redises.set(@key, 1)
|
|
8
|
+
@redises.incr(@key).should == 2
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "treats a missing key like 0" do
|
|
12
|
+
@redises.incr(@key).should == 1
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "increments negative numbers" do
|
|
16
|
+
@redises.set(@key, -10)
|
|
17
|
+
@redises.incr(@key).should == -9
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "works multiple times" do
|
|
21
|
+
@redises.incr(@key).should == 1
|
|
22
|
+
@redises.incr(@key).should == 2
|
|
23
|
+
@redises.incr(@key).should == 3
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "raises an error if the value does not look like an integer" do
|
|
27
|
+
@redises.set(@key, "one")
|
|
28
|
+
lambda do
|
|
29
|
+
@redises.incr(@key)
|
|
30
|
+
end.should raise_error(RuntimeError)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it_should_behave_like "a string-only command"
|
|
34
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe '#incrby(key, increment)' do
|
|
4
|
+
before { @key = 'mock-redis-test:65374' }
|
|
5
|
+
|
|
6
|
+
it "returns the value after the increment" do
|
|
7
|
+
@redises.set(@key, 2)
|
|
8
|
+
@redises.incrby(@key, 2).should == 4
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "treats a missing key like 0" do
|
|
12
|
+
@redises.incrby(@key, 1).should == 1
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "increments negative numbers" do
|
|
16
|
+
@redises.set(@key, -10)
|
|
17
|
+
@redises.incrby(@key, 2).should == -8
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "works multiple times" do
|
|
21
|
+
@redises.incrby(@key, 2).should == 2
|
|
22
|
+
@redises.incrby(@key, 2).should == 4
|
|
23
|
+
@redises.incrby(@key, 2).should == 6
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "accepts an integer-ish string" do
|
|
27
|
+
@redises.incrby(@key, "2").should == 2
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "raises an error if the value does not look like an integer" do
|
|
31
|
+
@redises.set(@key, "one")
|
|
32
|
+
lambda do
|
|
33
|
+
@redises.incrby(@key, 1)
|
|
34
|
+
end.should raise_error(RuntimeError)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "raises an error if the delta does not look like an integer" do
|
|
38
|
+
lambda do
|
|
39
|
+
@redises.incrby(@key, "foo")
|
|
40
|
+
end.should raise_error(RuntimeError)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it_should_behave_like "a string-only command"
|
|
44
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe '#keys()' do
|
|
4
|
+
|
|
5
|
+
it "returns [] when no keys are found (no regex characters)" do
|
|
6
|
+
@redises.keys("mock-redis-test:29016").should == []
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "returns [] when no keys are found (some regex characters)" do
|
|
10
|
+
@redises.keys("mock-redis-test:29016*").should == []
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "with pattern matching" do
|
|
14
|
+
before do
|
|
15
|
+
@redises.set("mock-redis-test:key1", 1)
|
|
16
|
+
@redises.set("mock-redis-test:key2", 2)
|
|
17
|
+
@redises.set("mock-redis-test:key3", 3)
|
|
18
|
+
@redises.set("mock-redis-test:key10", 10)
|
|
19
|
+
@redises.set("mock-redis-test:key20", 20)
|
|
20
|
+
@redises.set("mock-redis-test:key30", 30)
|
|
21
|
+
|
|
22
|
+
@redises.set("mock-redis-test:special-key?", 'true')
|
|
23
|
+
@redises.set("mock-redis-test:special-key*", 'true')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "the ? character" do
|
|
27
|
+
it "is treated as a single character (at the end of the pattern)" do
|
|
28
|
+
@redises.keys("mock-redis-test:key?").sort.should == [
|
|
29
|
+
'mock-redis-test:key1',
|
|
30
|
+
'mock-redis-test:key2',
|
|
31
|
+
'mock-redis-test:key3',
|
|
32
|
+
]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "is treated as a single character (in the middle of the pattern)" do
|
|
36
|
+
@redises.keys("mock-redis-test:key?0").sort.should == [
|
|
37
|
+
'mock-redis-test:key10',
|
|
38
|
+
'mock-redis-test:key20',
|
|
39
|
+
'mock-redis-test:key30',
|
|
40
|
+
]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "treats \? as a literal ?" do
|
|
44
|
+
@redises.keys('mock-redis-test:special-key\?').sort.should == [
|
|
45
|
+
'mock-redis-test:special-key?'
|
|
46
|
+
]
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe "the * character" do
|
|
51
|
+
it "is treated as 1 or more characters" do
|
|
52
|
+
@redises.keys("mock-redis-test:key*").sort.should == [
|
|
53
|
+
'mock-redis-test:key1',
|
|
54
|
+
'mock-redis-test:key10',
|
|
55
|
+
'mock-redis-test:key2',
|
|
56
|
+
'mock-redis-test:key20',
|
|
57
|
+
'mock-redis-test:key3',
|
|
58
|
+
'mock-redis-test:key30',
|
|
59
|
+
]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "treats \* as a literal *" do
|
|
63
|
+
@redises.keys('mock-redis-test:special-key\*').sort.should == [
|
|
64
|
+
'mock-redis-test:special-key*'
|
|
65
|
+
]
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
describe "character classes ([abcde])" do
|
|
70
|
+
it "matches any one of those characters" do
|
|
71
|
+
@redises.keys('mock-redis-test:key[12]').sort.should == [
|
|
72
|
+
'mock-redis-test:key1',
|
|
73
|
+
'mock-redis-test:key2',
|
|
74
|
+
]
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe "combining metacharacters" do
|
|
79
|
+
it "works with different metacharacters simultaneously" do
|
|
80
|
+
@redises.keys('mock-redis-test:k*[12]?').sort.should == [
|
|
81
|
+
'mock-redis-test:key10',
|
|
82
|
+
'mock-redis-test:key20',
|
|
83
|
+
]
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe '#lindex(key, index)' do
|
|
4
|
+
before { @key = 'mock-redis-test:69312' }
|
|
5
|
+
|
|
6
|
+
it "gets an element from the list by its index" do
|
|
7
|
+
@redises.lpush(@key, 20)
|
|
8
|
+
@redises.lpush(@key, 10)
|
|
9
|
+
|
|
10
|
+
@redises.lindex(@key, 0).should == "10"
|
|
11
|
+
@redises.lindex(@key, 1).should == "20"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "treats negative indices as coming from the right" do
|
|
15
|
+
@redises.lpush(@key, 20)
|
|
16
|
+
@redises.lpush(@key, 10)
|
|
17
|
+
|
|
18
|
+
@redises.lindex(@key, -1).should == "20"
|
|
19
|
+
@redises.lindex(@key, -2).should == "10"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "returns nil if the index is too large (and positive)" do
|
|
23
|
+
@redises.lpush(@key, 20)
|
|
24
|
+
|
|
25
|
+
@redises.lindex(@key, 100).should be_nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "returns nil if the index is too large (and negative)" do
|
|
29
|
+
@redises.lpush(@key, 20)
|
|
30
|
+
|
|
31
|
+
@redises.lindex(@key, -100).should be_nil
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "returns nil for nonexistent values" do
|
|
35
|
+
@redises.lindex(@key, 0).should be_nil
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it_should_behave_like "a list-only command"
|
|
39
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#linsert(key, :before|:after, pivot, value)" do
|
|
4
|
+
before { @key = 'mock-redis-test:48733' }
|
|
5
|
+
|
|
6
|
+
it "returns the new size of the list when the pivot is found" do
|
|
7
|
+
@redises.lpush(@key, 'X')
|
|
8
|
+
|
|
9
|
+
@redises.linsert(@key, :before, 'X', 'Y').should == 2
|
|
10
|
+
@redises.lpushx(@key, 'X').should == 3
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "does nothing when run against a nonexistent key" do
|
|
14
|
+
@redises.linsert(@key, :before, 1, 2).should == 0
|
|
15
|
+
@redises.get(@key).should be_nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "returns -1 if the pivot is not found" do
|
|
19
|
+
@redises.lpush(@key, 1)
|
|
20
|
+
@redises.linsert(@key, :after, 'X', 'Y').should == -1
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "inserts elements before the pivot when given :before as position" do
|
|
24
|
+
@redises.lpush(@key, 'bert')
|
|
25
|
+
@redises.linsert(@key, :before, 'bert', 'ernie')
|
|
26
|
+
|
|
27
|
+
@redises.lindex(@key, 0).should == 'ernie'
|
|
28
|
+
@redises.lindex(@key, 1).should == 'bert'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "inserts elements before the pivot when given 'before' as position" do
|
|
32
|
+
@redises.lpush(@key, 'bert')
|
|
33
|
+
@redises.linsert(@key, 'before', 'bert', 'ernie')
|
|
34
|
+
|
|
35
|
+
@redises.lindex(@key, 0).should == 'ernie'
|
|
36
|
+
@redises.lindex(@key, 1).should == 'bert'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "inserts elements after the pivot when given :after as position" do
|
|
40
|
+
@redises.lpush(@key, 'bert')
|
|
41
|
+
@redises.linsert(@key, :after, 'bert', 'ernie')
|
|
42
|
+
|
|
43
|
+
@redises.lindex(@key, 0).should == 'bert'
|
|
44
|
+
@redises.lindex(@key, 1).should == 'ernie'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "inserts elements after the pivot when given 'after' as position" do
|
|
48
|
+
@redises.lpush(@key, 'bert')
|
|
49
|
+
@redises.linsert(@key, 'after', 'bert', 'ernie')
|
|
50
|
+
|
|
51
|
+
@redises.lindex(@key, 0).should == 'bert'
|
|
52
|
+
@redises.lindex(@key, 1).should == 'ernie'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "raises an error when given a position that is neither before nor after" do
|
|
56
|
+
lambda do
|
|
57
|
+
@redises.linsert(@key, :near, 1, 2)
|
|
58
|
+
end.should raise_error(RuntimeError)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "stores values as strings" do
|
|
62
|
+
@redises.lpush(@key, 1)
|
|
63
|
+
@redises.linsert(@key, :before, 1, 2)
|
|
64
|
+
@redises.lindex(@key, 0).should == "2"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it_should_behave_like "a list-only command"
|
|
68
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#llen(key)" do
|
|
4
|
+
before { @key = 'mock-redis-test:78407' }
|
|
5
|
+
|
|
6
|
+
it "returns 0 for a nonexistent key" do
|
|
7
|
+
@redises.llen(@key).should == 0
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "returns the length of the list" do
|
|
11
|
+
5.times { @redises.lpush(@key, 'X') }
|
|
12
|
+
@redises.llen(@key).should == 5
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it_should_behave_like "a list-only command"
|
|
16
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe '#lpop(key)' do
|
|
4
|
+
before { @key = 'mock-redis-test:65374' }
|
|
5
|
+
|
|
6
|
+
it "returns and removes the first element of a list" do
|
|
7
|
+
@redises.lpush(@key, 1)
|
|
8
|
+
@redises.lpush(@key, 2)
|
|
9
|
+
|
|
10
|
+
@redises.lpop(@key).should == "2"
|
|
11
|
+
|
|
12
|
+
@redises.llen(@key).should == 1
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "returns nil if the list is empty" do
|
|
16
|
+
@redises.lpush(@key, 'foo')
|
|
17
|
+
@redises.lpop(@key)
|
|
18
|
+
|
|
19
|
+
@redises.lpop(@key).should be_nil
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "returns nil for nonexistent values" do
|
|
23
|
+
@redises.lpop(@key).should be_nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "removes empty lists" do
|
|
27
|
+
@redises.lpush(@key, 'foo')
|
|
28
|
+
@redises.lpop(@key)
|
|
29
|
+
|
|
30
|
+
@redises.get(@key).should be_nil
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it_should_behave_like "a list-only command"
|
|
34
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#lpush(key, value)" do
|
|
4
|
+
before { @key = 'mock-redis-test:57367' }
|
|
5
|
+
|
|
6
|
+
it "returns the new size of the list" do
|
|
7
|
+
@redises.lpush(@key, 'X').should == 1
|
|
8
|
+
@redises.lpush(@key, 'X').should == 2
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "creates a new list when run against a nonexistent key" do
|
|
12
|
+
@redises.lpush(@key, 'value')
|
|
13
|
+
@redises.llen(@key).should == 1
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "prepends items to the list" do
|
|
17
|
+
@redises.lpush(@key, "bert")
|
|
18
|
+
@redises.lpush(@key, "ernie")
|
|
19
|
+
|
|
20
|
+
@redises.lindex(@key, 0).should == "ernie"
|
|
21
|
+
@redises.lindex(@key, 1).should == "bert"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "stores values as strings" do
|
|
25
|
+
@redises.lpush(@key, 1)
|
|
26
|
+
@redises.lindex(@key, 0).should == "1"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it_should_behave_like "a list-only command"
|
|
30
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#lpushx(key, value)" do
|
|
4
|
+
before { @key = 'mock-redis-test:81267' }
|
|
5
|
+
|
|
6
|
+
it "returns the new size of the list" do
|
|
7
|
+
@redises.lpush(@key, 'X')
|
|
8
|
+
|
|
9
|
+
@redises.lpushx(@key, 'X').should == 2
|
|
10
|
+
@redises.lpushx(@key, 'X').should == 3
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "does nothing when run against a nonexistent key" do
|
|
14
|
+
@redises.lpushx(@key, 'value')
|
|
15
|
+
@redises.get(@key).should be_nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "prepends items to the list" do
|
|
19
|
+
@redises.lpush(@key, "bert")
|
|
20
|
+
@redises.lpushx(@key, "ernie")
|
|
21
|
+
|
|
22
|
+
@redises.lindex(@key, 0).should == "ernie"
|
|
23
|
+
@redises.lindex(@key, 1).should == "bert"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "stores values as strings" do
|
|
27
|
+
@redises.lpush(@key, 1)
|
|
28
|
+
@redises.lpushx(@key, 2)
|
|
29
|
+
@redises.lindex(@key, 0).should == "2"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it_should_behave_like "a list-only command"
|
|
33
|
+
end
|