mock_redis 0.13.2 → 0.14.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -1
  3. data/.travis.yml +3 -0
  4. data/CHANGELOG.md +10 -0
  5. data/Gemfile +0 -5
  6. data/README.md +2 -2
  7. data/lib/mock_redis.rb +1 -0
  8. data/lib/mock_redis/database.rb +11 -2
  9. data/lib/mock_redis/future.rb +22 -0
  10. data/lib/mock_redis/pipelined_wrapper.rb +0 -21
  11. data/lib/mock_redis/set_methods.rb +1 -0
  12. data/lib/mock_redis/string_methods.rb +13 -5
  13. data/lib/mock_redis/transaction_wrapper.rb +22 -8
  14. data/lib/mock_redis/version.rb +1 -1
  15. data/lib/mock_redis/zset_methods.rb +12 -9
  16. data/mock_redis.gemspec +2 -1
  17. data/spec/commands/connected_spec.rb +1 -1
  18. data/spec/commands/exists_spec.rb +2 -2
  19. data/spec/commands/expire_spec.rb +18 -2
  20. data/spec/commands/expireat_spec.rb +2 -2
  21. data/spec/commands/hexists_spec.rb +4 -4
  22. data/spec/commands/hsetnx_spec.rb +2 -2
  23. data/spec/commands/move_spec.rb +8 -8
  24. data/spec/commands/msetnx_spec.rb +2 -2
  25. data/spec/commands/persist_spec.rb +4 -4
  26. data/spec/commands/pexpire_spec.rb +2 -2
  27. data/spec/commands/pexpireat_spec.rb +2 -2
  28. data/spec/commands/renamenx_spec.rb +2 -2
  29. data/spec/commands/sadd_spec.rb +2 -2
  30. data/spec/commands/scan_spec.rb +51 -0
  31. data/spec/commands/set_spec.rb +6 -6
  32. data/spec/commands/setbit_spec.rb +7 -0
  33. data/spec/commands/setnx_spec.rb +2 -2
  34. data/spec/commands/sismember_spec.rb +5 -5
  35. data/spec/commands/smove_spec.rb +6 -6
  36. data/spec/commands/srem_spec.rb +3 -3
  37. data/spec/commands/sunion_spec.rb +4 -0
  38. data/spec/commands/zadd_spec.rb +2 -2
  39. data/spec/commands/zrange_spec.rb +1 -1
  40. data/spec/commands/zrangebyscore_spec.rb +1 -1
  41. data/spec/commands/zrem_spec.rb +3 -3
  42. data/spec/commands/zremrangebyscore_spec.rb +1 -0
  43. data/spec/commands/zrevrange_spec.rb +1 -1
  44. data/spec/commands/zrevrangebyscore_spec.rb +1 -1
  45. data/spec/commands/zscore_spec.rb +2 -2
  46. data/spec/spec_helper.rb +11 -2
  47. data/spec/support/redis_multiplexer.rb +6 -6
  48. data/spec/support/shared_examples/only_operates_on_hashes.rb +2 -2
  49. data/spec/support/shared_examples/only_operates_on_lists.rb +2 -2
  50. data/spec/support/shared_examples/only_operates_on_sets.rb +2 -2
  51. data/spec/support/shared_examples/only_operates_on_strings.rb +2 -2
  52. data/spec/support/shared_examples/only_operates_on_zsets.rb +4 -4
  53. data/spec/transactions_spec.rb +23 -0
  54. metadata +36 -18
@@ -6,12 +6,12 @@ describe "#hsetnx(key, field)" do
6
6
  end
7
7
 
8
8
  it "returns true if the field is absent" do
9
- @redises.hsetnx(@key, 'field', 'val').should be_true
9
+ @redises.hsetnx(@key, 'field', 'val').should == true
10
10
  end
11
11
 
12
12
  it "returns 0 if the field is present" do
13
13
  @redises.hset(@key, 'field', 'val')
14
- @redises.hsetnx(@key, 'field', 'val').should be_false
14
+ @redises.hsetnx(@key, 'field', 'val').should == false
15
15
  end
16
16
 
17
17
  it "leaves the field unchanged if the field is present" do
@@ -17,7 +17,7 @@ describe '#move(key, db)' do
17
17
  end
18
18
 
19
19
  it "returns false" do
20
- @redises.move(@key, @destdb).should be_false
20
+ @redises.move(@key, @destdb).should == false
21
21
  end
22
22
 
23
23
  it "leaves destdb/key alone" do
@@ -38,7 +38,7 @@ describe '#move(key, db)' do
38
38
  end
39
39
 
40
40
  it "returns false" do
41
- @redises.move(@key, @destdb).should be_false
41
+ @redises.move(@key, @destdb).should == false
42
42
  end
43
43
 
44
44
  it "leaves destdb/key alone" do
@@ -53,7 +53,7 @@ describe '#move(key, db)' do
53
53
  end
54
54
 
55
55
  it "returns true" do
56
- @redises.move(@key, @destdb).should be_true
56
+ @redises.move(@key, @destdb).should == true
57
57
  end
58
58
  end
59
59
 
@@ -64,7 +64,7 @@ describe '#move(key, db)' do
64
64
  end
65
65
 
66
66
  it "removes key from srcdb" do
67
- @redises.exists(@key).should be_false
67
+ @redises.exists(@key).should == false
68
68
  end
69
69
 
70
70
  it "copies key to destdb" do
@@ -81,7 +81,7 @@ describe '#move(key, db)' do
81
81
  end
82
82
 
83
83
  it "removes key from srcdb" do
84
- @redises.exists(@key).should be_false
84
+ @redises.exists(@key).should == false
85
85
  end
86
86
 
87
87
  it "copies key to destdb" do
@@ -99,7 +99,7 @@ describe '#move(key, db)' do
99
99
  end
100
100
 
101
101
  it "removes key from srcdb" do
102
- @redises.exists(@key).should be_false
102
+ @redises.exists(@key).should == false
103
103
  end
104
104
 
105
105
  it "copies key to destdb" do
@@ -117,7 +117,7 @@ describe '#move(key, db)' do
117
117
  end
118
118
 
119
119
  it "removes key from srcdb" do
120
- @redises.exists(@key).should be_false
120
+ @redises.exists(@key).should == false
121
121
  end
122
122
 
123
123
  it "copies key to destdb" do
@@ -135,7 +135,7 @@ describe '#move(key, db)' do
135
135
  end
136
136
 
137
137
  it "removes key from srcdb" do
138
- @redises.exists(@key).should be_false
138
+ @redises.exists(@key).should == false
139
139
  end
140
140
 
141
141
  it "copies key to destdb" do
@@ -7,7 +7,7 @@ describe '#msetnx(key, value [, key, value, ...])' do
7
7
  end
8
8
 
9
9
  it "responds with 1 if any keys were set" do
10
- @redises.msetnx(@key1, 1).should be_true
10
+ @redises.msetnx(@key1, 1).should == true
11
11
  end
12
12
 
13
13
  it "sets the values" do
@@ -23,7 +23,7 @@ describe '#msetnx(key, value [, key, value, ...])' do
23
23
 
24
24
  it "responds with 0 if any value is already set" do
25
25
  @redises.set(@key1, "old1")
26
- @redises.msetnx(@key1, 'value1', @key2, 'value2').should be_false
26
+ @redises.msetnx(@key1, 'value1', @key2, 'value2').should == false
27
27
  end
28
28
 
29
29
  it "raises an error if given an odd number of arguments" do
@@ -8,21 +8,21 @@ describe "#persist(key)" do
8
8
 
9
9
  it "returns true for a key with a timeout" do
10
10
  @redises.expire(@key, 10000)
11
- @redises.persist(@key).should be_true
11
+ @redises.persist(@key).should == true
12
12
  end
13
13
 
14
14
  it "returns false for a key with no timeout" do
15
- @redises.persist(@key).should be_false
15
+ @redises.persist(@key).should == false
16
16
  end
17
17
 
18
18
  it "returns false for a key that does not exist" do
19
- @redises.persist('mock-redis-test:nonesuch').should be_false
19
+ @redises.persist('mock-redis-test:nonesuch').should == false
20
20
  end
21
21
 
22
22
  it "removes the timeout" do
23
23
  @redises.expire(@key, 10000)
24
24
  @redises.persist(@key)
25
- @redises.persist(@key).should be_false
25
+ @redises.persist(@key).should == false
26
26
  end
27
27
 
28
28
  context "[mock only]" do
@@ -7,11 +7,11 @@ describe "#pexpire(key, ms)" do
7
7
  end
8
8
 
9
9
  it "returns true for a key that exists" do
10
- @redises.pexpire(@key, 1).should be_true
10
+ @redises.pexpire(@key, 1).should == true
11
11
  end
12
12
 
13
13
  it "returns false for a key that does not exist" do
14
- @redises.pexpire('mock-redis-test:nonesuch', 1).should be_false
14
+ @redises.pexpire('mock-redis-test:nonesuch', 1).should == false
15
15
  end
16
16
 
17
17
  it "removes a key immediately when ms==0" do
@@ -7,12 +7,12 @@ describe "#pexpireat(key, timestamp_ms)" do
7
7
  end
8
8
 
9
9
  it "returns true for a key that exists" do
10
- @redises.pexpireat(@key, (Time.now.to_f * 1000).to_i + 1).should be_true
10
+ @redises.pexpireat(@key, (Time.now.to_f * 1000).to_i + 1).should == true
11
11
  end
12
12
 
13
13
  it "returns false for a key that does not exist" do
14
14
  @redises.pexpireat('mock-redis-test:nonesuch',
15
- (Time.now.to_f * 1000).to_i + 1).should be_false
15
+ (Time.now.to_f * 1000).to_i + 1).should == false
16
16
  end
17
17
 
18
18
  it "removes a key immediately when timestamp is now" do
@@ -9,12 +9,12 @@ describe '#renamenx(key, newkey)' do
9
9
  end
10
10
 
11
11
  it "responds with true when newkey does not exist" do
12
- @redises.renamenx(@key, @newkey).should be_true
12
+ @redises.renamenx(@key, @newkey).should == true
13
13
  end
14
14
 
15
15
  it "responds with false when newkey exists" do
16
16
  @redises.set(@newkey, 'monkey')
17
- @redises.renamenx(@key, @newkey).should be_false
17
+ @redises.renamenx(@key, @newkey).should == false
18
18
  end
19
19
 
20
20
  it "moves the data" do
@@ -4,12 +4,12 @@ describe '#sadd(key, member)' do
4
4
  before { @key = 'mock-redis-test:sadd' }
5
5
 
6
6
  it "returns true if the set did not already contain member" do
7
- @redises.sadd(@key, 1).should be_true
7
+ @redises.sadd(@key, 1).should == true
8
8
  end
9
9
 
10
10
  it "returns false if the set did already contain member" do
11
11
  @redises.sadd(@key, 1)
12
- @redises.sadd(@key, 1).should be_false
12
+ @redises.sadd(@key, 1).should == false
13
13
  end
14
14
 
15
15
  it "adds member to the set" do
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#scan' do
4
+ subject { MockRedis::Database.new(self) }
5
+
6
+ let(:count) { 10 }
7
+ let(:match) { '*' }
8
+
9
+ before do
10
+ expect(subject).to receive_message_chain(:data, :keys).and_return(collection)
11
+ end
12
+
13
+ context 'when no keys are found' do
14
+ let(:collection) { [] }
15
+
16
+ it 'returns a 0 cursor and an empty collection' do
17
+ expect(subject.scan(0, count: count, match: match)).to eq(['0', []])
18
+ end
19
+ end
20
+
21
+ context 'when keys are found' do
22
+ context 'when count is lower than collection size' do
23
+ let(:collection) { (count+1).times.map {|i| "mock:key#{1}"} }
24
+ let(:expected) { [count.to_s, collection]}
25
+
26
+ it 'returns a the next cursor and the collection' do
27
+ expect(subject.scan(0, count: count, match: match)).to eq(expected)
28
+ end
29
+ end
30
+
31
+ context 'when count is greater or equal than collection size' do
32
+ let(:collection) { count.times.map {|i| "mock:key#{1}"} }
33
+ let(:expected) { ['0', collection]}
34
+
35
+ it 'returns a 0 cursor and the collection' do
36
+ expect(subject.scan(0, count: count, match: match)).to eq(expected)
37
+ end
38
+ end
39
+
40
+ context 'when giving a custom match filter' do
41
+ let(:match) { 'mock:key*' }
42
+ let(:collection) { %w(mock:key mock:key2 mock:otherkey) }
43
+ let(:expected) { ['0', %w(mock:key mock:key2)]}
44
+
45
+ it 'returns a 0 cursor and the filtered collection' do
46
+ expect(subject.scan(0, count: count, match: match)).to eq(expected)
47
+ end
48
+ end
49
+ end
50
+ end
51
+
@@ -9,28 +9,28 @@ describe '#set(key, value)' do
9
9
  it 'raises an error for EX seconds = 0' do
10
10
  expect do
11
11
  @redises.set('mock-redis-test', 1, ex: 0)
12
- end.to raise_error(Redis::CommandError, 'ERR invalid expire time in SETEX')
12
+ end.to raise_error(Redis::CommandError, 'ERR invalid expire time in set')
13
13
  end
14
14
 
15
15
  it 'raises an error for PX milliseconds = 0' do
16
16
  expect do
17
17
  @redises.set('mock-redis-test', 1, px: 0)
18
- end.to raise_error(Redis::CommandError, 'ERR invalid expire time in SETEX')
18
+ end.to raise_error(Redis::CommandError, 'ERR invalid expire time in set')
19
19
  end
20
20
 
21
21
  it 'accepts NX' do
22
22
  key = 'mock-redis-test'
23
23
  @redises.del(key)
24
- @redises.set(key, 1, nx: true).should be_true
25
- @redises.set(key, 1, nx: true).should be_false
24
+ @redises.set(key, 1, nx: true).should == true
25
+ @redises.set(key, 1, nx: true).should == false
26
26
  end
27
27
 
28
28
  it 'accepts XX' do
29
29
  key = 'mock-redis-test'
30
30
  @redises.del(key)
31
- @redises.set(key, 1, xx: true).should be_false
31
+ @redises.set(key, 1, xx: true).should == false
32
32
  @redises.set(key, 1).should == 'OK'
33
- @redises.set(key, 1, xx: true).should be_true
33
+ @redises.set(key, 1, xx: true).should == true
34
34
  end
35
35
 
36
36
  context '[mock only]' do
@@ -44,5 +44,12 @@ describe "#setbit(key, offset)" do
44
44
  @redises.get(@key).should == "@"
45
45
  end
46
46
 
47
+ it "sets and retrieves bits" do
48
+ @redises.setbit(@key, 22, 1)
49
+ @redises.getbit(@key, 22).should == 1
50
+ @redises.setbit(@key, 23, 0)
51
+ @redises.getbit(@key, 23).should == 0
52
+ end
53
+
47
54
  it_should_behave_like "a string-only command"
48
55
  end
@@ -4,12 +4,12 @@ describe '#setnx(key, value)' do
4
4
  before { @key = 'mock-redis-test:setnx' }
5
5
 
6
6
  it "returns true if the key was absent" do
7
- @redises.setnx(@key, 1).should be_true
7
+ @redises.setnx(@key, 1).should == true
8
8
  end
9
9
 
10
10
  it "returns false if the key was present" do
11
11
  @redises.set(@key, 2)
12
- @redises.setnx(@key, 1).should be_false
12
+ @redises.setnx(@key, 1).should == false
13
13
  end
14
14
 
15
15
  it "sets the value if missing" do
@@ -8,21 +8,21 @@ describe '#sismember(key, member)' do
8
8
  end
9
9
 
10
10
  it "returns true if member is in set" do
11
- @redises.sismember(@key, 'whiskey').should be_true
12
- @redises.sismember(@key, 'beer').should be_true
11
+ @redises.sismember(@key, 'whiskey').should == true
12
+ @redises.sismember(@key, 'beer').should == true
13
13
  end
14
14
 
15
15
  it "returns false if member is not in set" do
16
- @redises.sismember(@key, 'cola').should be_false
16
+ @redises.sismember(@key, 'cola').should == false
17
17
  end
18
18
 
19
19
  it "stringifies member" do
20
20
  @redises.sadd(@key, '1')
21
- @redises.sismember(@key, 1).should be_true
21
+ @redises.sismember(@key, 1).should == true
22
22
  end
23
23
 
24
24
  it "treats a nonexistent value as an empty set" do
25
- @redises.sismember('mock-redis-test:nonesuch', 'beer').should be_false
25
+ @redises.sismember('mock-redis-test:nonesuch', 'beer').should == false
26
26
  end
27
27
 
28
28
  it_should_behave_like "a set-only command"
@@ -10,22 +10,22 @@ describe '#smove(source, destination, member)' do
10
10
  end
11
11
 
12
12
  it "returns true if the member exists in src" do
13
- @redises.smove(@src, @dest, 1).should be_true
13
+ @redises.smove(@src, @dest, 1).should == true
14
14
  end
15
15
 
16
16
  it "returns false if the member exists in src" do
17
- @redises.smove(@src, @dest, 'nope').should be_false
17
+ @redises.smove(@src, @dest, 'nope').should == false
18
18
  end
19
19
 
20
20
  it "returns true if the member exists in src and dest" do
21
21
  @redises.sadd(@dest, 1)
22
- @redises.smove(@src, @dest, 1).should be_true
22
+ @redises.smove(@src, @dest, 1).should == true
23
23
  end
24
24
 
25
25
  it "moves member from source to destination" do
26
26
  @redises.smove(@src, @dest, 1)
27
- @redises.sismember(@dest, 1).should be_true
28
- @redises.sismember(@src, 1).should be_false
27
+ @redises.sismember(@dest, 1).should == true
28
+ @redises.sismember(@src, 1).should == false
29
29
  end
30
30
 
31
31
  it "cleans up empty sets" do
@@ -34,7 +34,7 @@ describe '#smove(source, destination, member)' do
34
34
  end
35
35
 
36
36
  it "treats a nonexistent value as an empty set" do
37
- @redises.smove('mock-redis-test:nonesuch', @dest, 1).should be_false
37
+ @redises.smove('mock-redis-test:nonesuch', @dest, 1).should == false
38
38
  end
39
39
 
40
40
  it_should_behave_like "a set-only command"
@@ -9,11 +9,11 @@ describe '#srem(key, member)' do
9
9
  end
10
10
 
11
11
  it "returns true if member is in the set" do
12
- @redises.srem(@key, 'bert').should be_true
12
+ @redises.srem(@key, 'bert').should == true
13
13
  end
14
14
 
15
15
  it "returns false if member is not in the set" do
16
- @redises.srem(@key, 'cookiemonster').should be_false
16
+ @redises.srem(@key, 'cookiemonster').should == false
17
17
  end
18
18
 
19
19
  it "removes member from the set" do
@@ -23,7 +23,7 @@ describe '#srem(key, member)' do
23
23
 
24
24
  it "stringifies member" do
25
25
  @redises.sadd(@key, '1')
26
- @redises.srem(@key, 1).should be_true
26
+ @redises.srem(@key, 1).should == true
27
27
  end
28
28
 
29
29
  it "cleans up empty sets" do
@@ -18,6 +18,10 @@ describe '#sunion(key [, key, ...])' do
18
18
  should == %w[2 3 5 7]
19
19
  end
20
20
 
21
+ it "allows Array as argument" do
22
+ @redises.sunion([@evens, @primes]).should == %w[2 4 6 8 10 3 5 7]
23
+ end
24
+
21
25
  it "raises an error if given 0 sets" do
22
26
  lambda do
23
27
  @redises.sunion
@@ -4,12 +4,12 @@ describe "#zadd(key, score, member)" do
4
4
  before { @key = 'mock-redis-test:zadd' }
5
5
 
6
6
  it "returns true if member wasn't present in the set" do
7
- @redises.zadd(@key, 1, 'foo').should be_true
7
+ @redises.zadd(@key, 1, 'foo').should == true
8
8
  end
9
9
 
10
10
  it "returns false if member was present in the set" do
11
11
  @redises.zadd(@key, 1, 'foo')
12
- @redises.zadd(@key, 1, 'foo').should be_false
12
+ @redises.zadd(@key, 1, 'foo').should == false
13
13
  end
14
14
 
15
15
  it "adds member to the set" do
@@ -15,7 +15,7 @@ describe "#zrange(key, start, stop [, :with_scores => true])" do
15
15
  end
16
16
 
17
17
  it 'should return an empty array' do
18
- @redises.exists(@key).should be_false
18
+ @redises.exists(@key).should == false
19
19
  @redises.zrange(@key, 0, 4).should == []
20
20
  end
21
21
  end
@@ -15,7 +15,7 @@ describe "#zrangebyscore(key, start, stop [:with_scores => true] [:limit => [off
15
15
  end
16
16
 
17
17
  it 'should return an empty array' do
18
- @redises.exists(@key).should be_false
18
+ @redises.exists(@key).should == false
19
19
  @redises.zrangebyscore(@key, 0, 4).should == []
20
20
  end
21
21
  end