mock_redis 0.9.0 → 0.10.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.
- data/CHANGELOG.md +3 -0
- data/lib/mock_redis/string_methods.rb +30 -4
- data/lib/mock_redis/version.rb +1 -1
- data/mock_redis.gemspec +14 -10
- data/spec/commands/set_spec.rb +56 -0
- metadata +59 -77
data/CHANGELOG.md
CHANGED
@@ -135,13 +135,39 @@ class MockRedis
|
|
135
135
|
msetnx(*hash.to_a.flatten)
|
136
136
|
end
|
137
137
|
|
138
|
-
def set(key, value)
|
138
|
+
def set(key, value, options = {})
|
139
|
+
return_true = false
|
140
|
+
options = options.dup
|
141
|
+
if options.delete(:nx)
|
142
|
+
if exists(key)
|
143
|
+
return false
|
144
|
+
else
|
145
|
+
return_true = true
|
146
|
+
end
|
147
|
+
end
|
148
|
+
if options.delete(:xx)
|
149
|
+
if exists(key)
|
150
|
+
return_true = true
|
151
|
+
else
|
152
|
+
return false
|
153
|
+
end
|
154
|
+
end
|
139
155
|
data[key] = value.to_s
|
140
|
-
|
156
|
+
|
157
|
+
# take latter
|
158
|
+
expire_option = options.to_a.last
|
159
|
+
if expire_option
|
160
|
+
type, duration = expire_option
|
161
|
+
if duration == 0
|
162
|
+
raise Redis::CommandError, 'ERR invalid expire time in SETEX'
|
163
|
+
end
|
164
|
+
expire(key, type.to_sym == :ex ? duration : duration / 1000.0)
|
165
|
+
end
|
166
|
+
return_true ? true : 'OK'
|
141
167
|
end
|
142
168
|
|
143
|
-
def []=(key, value)
|
144
|
-
set(key, value)
|
169
|
+
def []=(key, value, options = {})
|
170
|
+
set(key, value, options)
|
145
171
|
end
|
146
172
|
|
147
173
|
def setbit(key, offset, value)
|
data/lib/mock_redis/version.rb
CHANGED
data/mock_redis.gemspec
CHANGED
@@ -1,24 +1,28 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path(
|
3
|
-
require
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'mock_redis/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
|
-
s.name =
|
6
|
+
s.name = 'mock_redis'
|
7
7
|
s.version = MockRedis::VERSION
|
8
|
+
s.license = 'MIT'
|
8
9
|
s.platform = Gem::Platform::RUBY
|
9
10
|
s.authors = ['Causes Engineering', 'Samuel Merritt']
|
10
11
|
s.email = ['eng@causes.com']
|
11
|
-
s.homepage =
|
12
|
-
s.summary =
|
12
|
+
s.homepage = 'https://github.com/causes/mock_redis'
|
13
|
+
s.summary = 'Redis mock that just lives in memory; useful for testing.'
|
13
14
|
|
14
|
-
s.description =
|
15
|
+
s.description = <<-EOS.strip.gsub(/\s+/, ' ')
|
16
|
+
Instantiate one with `redis = MockRedis.new` and treat it like you would a
|
17
|
+
normal Redis object. It supports all the usual Redis operations.
|
18
|
+
EOS
|
15
19
|
|
16
20
|
s.files = `git ls-files`.split("\n")
|
17
21
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
22
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
-
s.require_paths = [
|
23
|
+
s.require_paths = ['lib']
|
20
24
|
|
21
|
-
s.add_development_dependency
|
22
|
-
s.add_development_dependency
|
23
|
-
s.add_development_dependency
|
25
|
+
s.add_development_dependency 'rake', '~> 0.9.2'
|
26
|
+
s.add_development_dependency 'redis', '~> 3.0.0'
|
27
|
+
s.add_development_dependency 'rspec', '~> 2.6.0'
|
24
28
|
end
|
data/spec/commands/set_spec.rb
CHANGED
@@ -4,4 +4,60 @@ describe '#set(key, value)' do
|
|
4
4
|
it "responds with 'OK'" do
|
5
5
|
@redises.set('mock-redis-test', 1).should == 'OK'
|
6
6
|
end
|
7
|
+
|
8
|
+
context 'options' do
|
9
|
+
it 'raises an error for EX seconds = 0' do
|
10
|
+
expect do
|
11
|
+
@redises.set('mock-redis-test', 1, ex: 0)
|
12
|
+
end.to raise_error(Redis::CommandError, 'ERR invalid expire time in SETEX')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'raises an error for PX milliseconds = 0' do
|
16
|
+
expect do
|
17
|
+
@redises.set('mock-redis-test', 1, px: 0)
|
18
|
+
end.to raise_error(Redis::CommandError, 'ERR invalid expire time in SETEX')
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'accepts NX' do
|
22
|
+
key = 'mock-redis-test'
|
23
|
+
@redises.del(key)
|
24
|
+
@redises.set(key, 1, nx: true).should be_true
|
25
|
+
@redises.set(key, 1, nx: true).should be_false
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'accepts XX' do
|
29
|
+
key = 'mock-redis-test'
|
30
|
+
@redises.del(key)
|
31
|
+
@redises.set(key, 1, xx: true).should be_false
|
32
|
+
@redises.set(key, 1).should == 'OK'
|
33
|
+
@redises.set(key, 1, xx: true).should be_true
|
34
|
+
end
|
35
|
+
|
36
|
+
context '[mock only]' do
|
37
|
+
before(:all) do
|
38
|
+
@mock = @redises.mock
|
39
|
+
end
|
40
|
+
|
41
|
+
before do
|
42
|
+
@now = Time.now
|
43
|
+
Time.stub!(:now).and_return(@now)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'accepts EX seconds' do
|
47
|
+
key = 'mock-redis-test'
|
48
|
+
@mock.set(key, 1, ex: 1).should == 'OK'
|
49
|
+
@mock.get(key).should_not be_nil
|
50
|
+
Time.stub!(:now).and_return(@now + 2)
|
51
|
+
@mock.get(key).should be_nil
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'accepts PX milliseconds' do
|
55
|
+
key = 'mock-redis-test'
|
56
|
+
@mock.set(key, 1, px: 1000).should == 'OK'
|
57
|
+
@mock.get(key).should_not be_nil
|
58
|
+
Time.stub!(:now).and_return(@now + 2)
|
59
|
+
@mock.get(key).should be_nil
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
7
63
|
end
|
metadata
CHANGED
@@ -1,82 +1,73 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: mock_redis
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 9
|
9
|
-
- 0
|
10
|
-
version: 0.9.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.10.0
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Causes Engineering
|
14
9
|
- Samuel Merritt
|
15
10
|
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
dependencies:
|
22
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2013-11-08 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
23
16
|
name: rake
|
24
|
-
|
25
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
26
18
|
none: false
|
27
|
-
requirements:
|
19
|
+
requirements:
|
28
20
|
- - ~>
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
hash: 63
|
31
|
-
segments:
|
32
|
-
- 0
|
33
|
-
- 9
|
34
|
-
- 2
|
21
|
+
- !ruby/object:Gem::Version
|
35
22
|
version: 0.9.2
|
36
23
|
type: :development
|
37
|
-
version_requirements: *id001
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: redis
|
40
24
|
prerelease: false
|
41
|
-
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 0.9.2
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: redis
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
42
34
|
none: false
|
43
|
-
requirements:
|
35
|
+
requirements:
|
44
36
|
- - ~>
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
hash: 7
|
47
|
-
segments:
|
48
|
-
- 3
|
49
|
-
- 0
|
50
|
-
- 0
|
37
|
+
- !ruby/object:Gem::Version
|
51
38
|
version: 3.0.0
|
52
39
|
type: :development
|
53
|
-
version_requirements: *id002
|
54
|
-
- !ruby/object:Gem::Dependency
|
55
|
-
name: rspec
|
56
40
|
prerelease: false
|
57
|
-
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
42
|
none: false
|
59
|
-
requirements:
|
43
|
+
requirements:
|
60
44
|
- - ~>
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 3.0.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
67
54
|
version: 2.6.0
|
68
55
|
type: :development
|
69
|
-
|
70
|
-
|
71
|
-
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 2.6.0
|
63
|
+
description: Instantiate one with `redis = MockRedis.new` and treat it like you would
|
64
|
+
a normal Redis object. It supports all the usual Redis operations.
|
65
|
+
email:
|
72
66
|
- eng@causes.com
|
73
67
|
executables: []
|
74
|
-
|
75
68
|
extensions: []
|
76
|
-
|
77
69
|
extra_rdoc_files: []
|
78
|
-
|
79
|
-
files:
|
70
|
+
files:
|
80
71
|
- .gitignore
|
81
72
|
- .mailmap
|
82
73
|
- .rspec
|
@@ -239,41 +230,32 @@ files:
|
|
239
230
|
- spec/support/shared_examples/only_operates_on_zsets.rb
|
240
231
|
- spec/support/shared_examples/sorts_enumerables.rb
|
241
232
|
- spec/transactions_spec.rb
|
242
|
-
has_rdoc: true
|
243
233
|
homepage: https://github.com/causes/mock_redis
|
244
|
-
licenses:
|
245
|
-
|
234
|
+
licenses:
|
235
|
+
- MIT
|
246
236
|
post_install_message:
|
247
237
|
rdoc_options: []
|
248
|
-
|
249
|
-
require_paths:
|
238
|
+
require_paths:
|
250
239
|
- lib
|
251
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
240
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
252
241
|
none: false
|
253
|
-
requirements:
|
254
|
-
- -
|
255
|
-
- !ruby/object:Gem::Version
|
256
|
-
|
257
|
-
|
258
|
-
- 0
|
259
|
-
version: "0"
|
260
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
242
|
+
requirements:
|
243
|
+
- - ! '>='
|
244
|
+
- !ruby/object:Gem::Version
|
245
|
+
version: '0'
|
246
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
261
247
|
none: false
|
262
|
-
requirements:
|
263
|
-
- -
|
264
|
-
- !ruby/object:Gem::Version
|
265
|
-
|
266
|
-
segments:
|
267
|
-
- 0
|
268
|
-
version: "0"
|
248
|
+
requirements:
|
249
|
+
- - ! '>='
|
250
|
+
- !ruby/object:Gem::Version
|
251
|
+
version: '0'
|
269
252
|
requirements: []
|
270
|
-
|
271
253
|
rubyforge_project:
|
272
|
-
rubygems_version: 1.
|
254
|
+
rubygems_version: 1.8.23
|
273
255
|
signing_key:
|
274
256
|
specification_version: 3
|
275
257
|
summary: Redis mock that just lives in memory; useful for testing.
|
276
|
-
test_files:
|
258
|
+
test_files:
|
277
259
|
- spec/client_spec.rb
|
278
260
|
- spec/cloning_spec.rb
|
279
261
|
- spec/commands/append_spec.rb
|