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,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
|