mock_redis 0.11.0 → 0.12.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb3767ba43e249e21a60d9a6d98c9774252a9358
4
- data.tar.gz: b6e646227a8ee1a21397a91d66855b5a35fd7c04
3
+ metadata.gz: 516b9db310fcc1afb4836e614d64d2e6eaf182be
4
+ data.tar.gz: 346ab1f34936cd9b19387912c34c694d27ef1ff9
5
5
  SHA512:
6
- metadata.gz: 0809de69122227d0ab9935b12b3f4fa65a4af1855ad33042a3cc8df59de5cb4ca4545cea3e6a693622661f5d20a2c9ab395dc3a87075ab5df318e5f2c819e38e
7
- data.tar.gz: 7f245ec950344101749bd080025d3b164a935f3ba8862cd54d9aeb84a0be29a75de7e1b0240294eb1efe1facc94b34e6587ad4143ed707e28e1ed2284d524cb0
6
+ metadata.gz: 2c4e3966c3ad7feba84548c6591aa55bbf7c1fe3d01d8051da4b1be41749fe23afb02475ba176bd7fad4d3ed761be2bbdbf511151c80c74ed9e1b3b133b7b7a6
7
+ data.tar.gz: df2c5def2bd41aba2671033ee2064dfbf31a5dabaf21ba5ba9a578200623648ef7d3a8c1b92e64a0d63b35af2bc00dd30c856afb6b4b07704b428a44324ba1d2
data/.overcommit.yml ADDED
@@ -0,0 +1,3 @@
1
+ CommitMsg:
2
+ GerritChangeId:
3
+ enabled: true
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # MockRedis Changelog
2
+
3
+ ### 0.12.0
4
+
5
+ * Fix bug where `del` would not raise error when given empty array
6
+ * Add support for the BITCOUNT command
7
+
1
8
  ### 0.11.0
2
9
 
3
10
  * Raise errors for empty arrays as arguments
@@ -54,8 +54,10 @@ class MockRedis
54
54
  end
55
55
 
56
56
  def del(*keys)
57
+ keys = keys.flatten.map(&:to_s)
58
+ assert_has_args(keys, 'del')
59
+
57
60
  keys.
58
- flatten.
59
61
  find_all{|key| data[key]}.
60
62
  each {|k| persist(k)}.
61
63
  each {|k| data.delete(k)}.
@@ -208,6 +208,33 @@ class MockRedis
208
208
  retval
209
209
  end
210
210
 
211
+ def bitcount(key, start = 0, stop = -1)
212
+ assert_stringy(key)
213
+
214
+ str = data[key] || ""
215
+ count = 0
216
+ m1 = 0x5555555555555555
217
+ m2 = 0x3333333333333333
218
+ m4 = 0x0f0f0f0f0f0f0f0f
219
+ m8 = 0x00ff00ff00ff00ff
220
+ m16 = 0x0000ffff0000ffff
221
+ m32 = 0x00000000ffffffff
222
+
223
+ str.bytes.to_a[start..stop].each do |byte|
224
+ # Naive Hamming weight
225
+ c = byte
226
+ c = (c & m1) + ((c >> 1) & m1)
227
+ c = (c & m2) + ((c >> 2) & m2)
228
+ c = (c & m4) + ((c >> 4) & m4)
229
+ c = (c & m8) + ((c >> 8) & m8)
230
+ c = (c & m16) + ((c >> 16) & m16)
231
+ c = (c & m32) + ((c >> 32) & m32)
232
+ count += c
233
+ end
234
+
235
+ count
236
+ end
237
+
211
238
  def setex(key, seconds, value)
212
239
  set(key, value)
213
240
  expire(key, seconds)
@@ -1,3 +1,4 @@
1
+ # Defines the gem version.
1
2
  class MockRedis
2
- VERSION = '0.11.0'
3
+ VERSION = '0.12.0'
3
4
  end
data/mock_redis.gemspec CHANGED
@@ -1,5 +1,4 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path('../lib', __FILE__)
1
+ $LOAD_PATH << File.expand_path('../lib', __FILE__)
3
2
  require 'mock_redis/version'
4
3
 
5
4
  Gem::Specification.new do |s|
@@ -19,10 +18,10 @@ Gem::Specification.new do |s|
19
18
 
20
19
  s.files = `git ls-files`.split("\n")
21
20
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
23
22
  s.require_paths = ['lib']
24
23
 
25
- s.add_development_dependency 'rake', '~> 0.9.2'
24
+ s.add_development_dependency 'rake', '~> 10.0'
26
25
  s.add_development_dependency 'redis', '~> 3.0.0'
27
- s.add_development_dependency 'rspec', '~> 2.6.0'
26
+ s.add_development_dependency 'rspec', '~> 2.14.0'
28
27
  end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe "#bitcount(key [, start, end ])" do
4
+ before do
5
+ @key = 'mock-redis-test:bitcount'
6
+ @redises.set(@key, "foobar")
7
+ end
8
+
9
+ it 'gets the number of set bits from the key' do
10
+ @redises.bitcount(@key).should == 26
11
+ end
12
+
13
+ it 'gets the number of set bits from the key in an interval' do
14
+ @redises.bitcount(@key, 0, 1000).should == 26
15
+ @redises.bitcount(@key, 0, 0).should == 4
16
+ @redises.bitcount(@key, 1, 1).should == 6
17
+ @redises.bitcount(@key, 1, -2).should == 18
18
+ end
19
+
20
+ it 'treats nonexistent keys as empty strings' do
21
+ @redises.bitcount('mock-redis-test:not-found').should == 0
22
+ end
23
+
24
+ it_should_behave_like "a string-only command"
25
+ end
@@ -30,7 +30,7 @@ describe '#blpop(key [, key, ...,], timeout)' do
30
30
  it "allows subsecond timeouts" do
31
31
  lambda do
32
32
  @redises.blpop(@list1, @list2, 0.5)
33
- end.should_not raise_error(Redis::CommandError)
33
+ end.should_not raise_error
34
34
  end
35
35
 
36
36
  it "raises an error on negative timeout" do
@@ -29,7 +29,7 @@ describe '#brpop(key [, key, ...,], timeout)' do
29
29
  it "allows subsecond timeouts" do
30
30
  lambda do
31
31
  @redises.brpop(@list1, @list2, 0.5)
32
- end.should_not raise_error(Redis::CommandError)
32
+ end.should_not raise_error
33
33
  end
34
34
 
35
35
  it "raises an error on negative timeout" do
@@ -24,12 +24,6 @@ describe '#brpoplpush(source, destination, timeout)' do
24
24
  @redises.brpoplpush(@list1, @list2, 0).should == "B"
25
25
  end
26
26
 
27
- it "allows subsecond timeout" do
28
- lambda do
29
- @redises.brpoplpush(@list1, @list2, 0.5)
30
- end.should_not raise_error(Redis::CommandError)
31
- end
32
-
33
27
  it "raises an error on negative timeout" do
34
28
  lambda do
35
29
  @redises.brpoplpush(@list1, @list2, -1)
@@ -27,4 +27,8 @@ describe '#del(key [, key, ...])' do
27
27
  @redises.get('mock-redis-test:1').should be_nil
28
28
  @redises.get('mock-redis-test:2').should be_nil
29
29
  end
30
+
31
+ it "raises an error if an empty array is given" do
32
+ expect { @redises.del [] }.to raise_error Redis::CommandError
33
+ end
30
34
  end
@@ -39,12 +39,12 @@ describe "#expire(key, seconds)" do
39
39
 
40
40
  before do
41
41
  @now = Time.now
42
- Time.stub!(:now).and_return(@now)
42
+ Time.stub(:now).and_return(@now)
43
43
  end
44
44
 
45
45
  it "removes keys after enough time has passed" do
46
46
  @mock.expire(@key, 5)
47
- Time.stub!(:now).and_return(@now + 5)
47
+ Time.stub(:now).and_return(@now + 5)
48
48
  @mock.get(@key).should be_nil
49
49
  end
50
50
 
@@ -52,15 +52,15 @@ describe "#expire(key, seconds)" do
52
52
  @mock.expire(@key, 5)
53
53
  @mock.expire(@key, 6)
54
54
 
55
- Time.stub!(:now).and_return(@now + 5)
55
+ Time.stub(:now).and_return(@now + 5)
56
56
  @mock.get(@key).should_not be_nil
57
57
  end
58
58
 
59
59
  it "has millisecond precision" do
60
60
  @now = Time.at(@now.to_i + 0.5)
61
- Time.stub!(:now).and_return(@now)
61
+ Time.stub(:now).and_return(@now)
62
62
  @mock.expire(@key, 5)
63
- Time.stub!(:now).and_return(@now + 4.9)
63
+ Time.stub(:now).and_return(@now + 4.9)
64
64
  @mock.get(@key).should_not be_nil
65
65
  end
66
66
 
@@ -73,7 +73,7 @@ describe "#expire(key, seconds)" do
73
73
  @mock.del(@key)
74
74
  @mock.set(@key, 'string')
75
75
 
76
- Time.stub!(:now).and_return(@now + 2)
76
+ Time.stub(:now).and_return(@now + 2)
77
77
 
78
78
  @mock.get(@key).should_not be_nil
79
79
  end
@@ -85,7 +85,7 @@ describe "#expire(key, seconds)" do
85
85
 
86
86
  @mock.rpush(@key, 'coconuts')
87
87
 
88
- Time.stub!(:now).and_return(@now + 2)
88
+ Time.stub(:now).and_return(@now + 2)
89
89
 
90
90
  @mock.lindex(@key, 0).should_not be_nil
91
91
  end
@@ -35,12 +35,12 @@ describe "#expireat(key, timestamp)" do
35
35
 
36
36
  before do
37
37
  @now = Time.now
38
- Time.stub!(:now).and_return(@now)
38
+ Time.stub(:now).and_return(@now)
39
39
  end
40
40
 
41
41
  it "removes keys after enough time has passed" do
42
42
  @mock.expireat(@key, @now.to_i + 5)
43
- Time.stub!(:now).and_return(@now + 5)
43
+ Time.stub(:now).and_return(@now + 5)
44
44
  @mock.get(@key).should be_nil
45
45
  end
46
46
 
@@ -35,13 +35,13 @@ describe "#persist(key)" do
35
35
 
36
36
  before do
37
37
  @now = Time.now
38
- Time.stub!(:now).and_return(@now)
38
+ Time.stub(:now).and_return(@now)
39
39
  end
40
40
 
41
41
  it "makes keys stay around" do
42
42
  @mock.expire(@key, 5)
43
43
  @mock.persist(@key)
44
- Time.stub!(:now).and_return(@now + 5)
44
+ Time.stub(:now).and_return(@now + 5)
45
45
  @mock.get(@key).should_not be_nil
46
46
  end
47
47
 
@@ -39,12 +39,12 @@ describe "#pexpire(key, ms)" do
39
39
 
40
40
  before do
41
41
  @now = Time.now.round
42
- Time.stub!(:now).and_return(@now)
42
+ Time.stub(:now).and_return(@now)
43
43
  end
44
44
 
45
45
  it "removes keys after enough time has passed" do
46
46
  @mock.pexpire(@key, 5)
47
- Time.stub!(:now).and_return(@now + Rational(6, 1000))
47
+ Time.stub(:now).and_return(@now + Rational(6, 1000))
48
48
  @mock.get(@key).should be_nil
49
49
  end
50
50
 
@@ -52,7 +52,7 @@ describe "#pexpire(key, ms)" do
52
52
  @mock.pexpire(@key, 5)
53
53
  @mock.pexpire(@key, 6)
54
54
 
55
- Time.stub!(:now).and_return(@now + Rational(5, 1000))
55
+ Time.stub(:now).and_return(@now + Rational(5, 1000))
56
56
  @mock.get(@key).should_not be_nil
57
57
  end
58
58
 
@@ -65,7 +65,7 @@ describe "#pexpire(key, ms)" do
65
65
  @mock.del(@key)
66
66
  @mock.set(@key, 'string')
67
67
 
68
- Time.stub!(:now).and_return(@now + 0.003)
68
+ Time.stub(:now).and_return(@now + 0.003)
69
69
 
70
70
  @mock.get(@key).should_not be_nil
71
71
  end
@@ -77,7 +77,7 @@ describe "#pexpire(key, ms)" do
77
77
 
78
78
  @mock.rpush(@key, 'coconuts')
79
79
 
80
- Time.stub!(:now).and_return(@now + 0.003)
80
+ Time.stub(:now).and_return(@now + 0.003)
81
81
 
82
82
  @mock.lindex(@key, 0).should_not be_nil
83
83
  end
@@ -36,12 +36,12 @@ describe "#pexpireat(key, timestamp_ms)" do
36
36
 
37
37
  before do
38
38
  @now = Time.now
39
- Time.stub!(:now).and_return(@now)
39
+ Time.stub(:now).and_return(@now)
40
40
  end
41
41
 
42
42
  it "removes keys after enough time has passed" do
43
43
  @mock.pexpireat(@key, (@now.to_f * 1000).to_i + 5)
44
- Time.stub!(:now).and_return(@now + 0.006)
44
+ Time.stub(:now).and_return(@now + 0.006)
45
45
  @mock.get(@key).should be_nil
46
46
  end
47
47
  end
@@ -30,7 +30,7 @@ describe "#pttl(key)" do
30
30
 
31
31
  before do
32
32
  @now = Time.now.round
33
- Time.stub!(:now).and_return(@now)
33
+ Time.stub(:now).and_return(@now)
34
34
  end
35
35
 
36
36
  it "gives you the key's remaining lifespan in milliseconds" do
@@ -29,7 +29,7 @@ describe "#select(db)" do
29
29
  # Time dependence introduces a bit of nondeterminism here
30
30
  before do
31
31
  @now = Time.now
32
- Time.stub!(:now).and_return(@now)
32
+ Time.stub(:now).and_return(@now)
33
33
 
34
34
  @mock = @redises.mock
35
35
 
@@ -40,14 +40,14 @@ describe '#set(key, value)' do
40
40
 
41
41
  before do
42
42
  @now = Time.now
43
- Time.stub!(:now).and_return(@now)
43
+ Time.stub(:now).and_return(@now)
44
44
  end
45
45
 
46
46
  it 'accepts EX seconds' do
47
47
  key = 'mock-redis-test'
48
48
  @mock.set(key, 1, ex: 1).should == 'OK'
49
49
  @mock.get(key).should_not be_nil
50
- Time.stub!(:now).and_return(@now + 2)
50
+ Time.stub(:now).and_return(@now + 2)
51
51
  @mock.get(key).should be_nil
52
52
  end
53
53
 
@@ -55,7 +55,7 @@ describe '#set(key, value)' do
55
55
  key = 'mock-redis-test'
56
56
  @mock.set(key, 1, px: 1000).should == 'OK'
57
57
  @mock.get(key).should_not be_nil
58
- Time.stub!(:now).and_return(@now + 2)
58
+ Time.stub(:now).and_return(@now + 2)
59
59
  @mock.get(key).should be_nil
60
60
  end
61
61
  end
@@ -29,7 +29,7 @@ describe "#ttl(key)" do
29
29
 
30
30
  before do
31
31
  @now = Time.now
32
- Time.stub!(:now).and_return(@now)
32
+ Time.stub(:now).and_return(@now)
33
33
  end
34
34
 
35
35
  it "gives you the key's remaining lifespan in seconds" do
@@ -28,10 +28,9 @@ describe 'transactions (multi/exec/discard)' do
28
28
  lambda do
29
29
  @redises.mock.multi do |r|
30
30
  # do stuff that succeed
31
- s.set(nil, 'string')
31
+ r.set(nil, 'string')
32
32
  end
33
- end.should_not raise_error(RuntimeError)
34
-
33
+ end.should_not raise_error
35
34
  end
36
35
  end
37
36
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mock_redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Causes Engineering
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-22 00:00:00.000000000 Z
12
+ date: 2014-04-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ~>
19
19
  - !ruby/object:Gem::Version
20
- version: 0.9.2
20
+ version: '10.0'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ~>
26
26
  - !ruby/object:Gem::Version
27
- version: 0.9.2
27
+ version: '10.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: redis
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -45,14 +45,14 @@ dependencies:
45
45
  requirements:
46
46
  - - ~>
47
47
  - !ruby/object:Gem::Version
48
- version: 2.6.0
48
+ version: 2.14.0
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ~>
54
54
  - !ruby/object:Gem::Version
55
- version: 2.6.0
55
+ version: 2.14.0
56
56
  description: Instantiate one with `redis = MockRedis.new` and treat it like you would
57
57
  a normal Redis object. It supports all the usual Redis operations.
58
58
  email:
@@ -63,6 +63,7 @@ extra_rdoc_files: []
63
63
  files:
64
64
  - .gitignore
65
65
  - .mailmap
66
+ - .overcommit.yml
66
67
  - .rspec
67
68
  - .travis.yml
68
69
  - CHANGELOG.md
@@ -97,6 +98,7 @@ files:
97
98
  - spec/commands/auth_spec.rb
98
99
  - spec/commands/bgrewriteaof_spec.rb
99
100
  - spec/commands/bgsave_spec.rb
101
+ - spec/commands/bitcount_spec.rb
100
102
  - spec/commands/blpop_spec.rb
101
103
  - spec/commands/brpop_spec.rb
102
104
  - spec/commands/brpoplpush_spec.rb
@@ -256,6 +258,7 @@ test_files:
256
258
  - spec/commands/auth_spec.rb
257
259
  - spec/commands/bgrewriteaof_spec.rb
258
260
  - spec/commands/bgsave_spec.rb
261
+ - spec/commands/bitcount_spec.rb
259
262
  - spec/commands/blpop_spec.rb
260
263
  - spec/commands/brpop_spec.rb
261
264
  - spec/commands/brpoplpush_spec.rb