mock_redis 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,6 @@
1
+ ### 0.10.0
2
+ * Add support for :nx, :xx, :ex, :px options for SET command
3
+
1
4
  ### 0.9.0
2
5
  * Added futures support
3
6
 
@@ -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
- 'OK'
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)
@@ -1,3 +1,3 @@
1
1
  class MockRedis
2
- VERSION = '0.9.0'
2
+ VERSION = '0.10.0'
3
3
  end
@@ -1,24 +1,28 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "mock_redis/version"
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'mock_redis/version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "mock_redis"
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 = "https://github.com/causes/mock_redis"
12
- s.summary = %q{Redis mock that just lives in memory; useful for testing.}
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 = %q{Instantiate one with `redis = MockRedis.new` and treat it like you would a normal Redis object. It supports all the usual Redis operations.}
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 = ["lib"]
23
+ s.require_paths = ['lib']
20
24
 
21
- s.add_development_dependency "rake", "~> 0.9.2"
22
- s.add_development_dependency "redis", "~> 3.0.0"
23
- s.add_development_dependency "rspec", "~> 2.6.0"
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
@@ -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
- hash: 59
5
- prerelease: false
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
- date: 2013-08-08 00:00:00 -07:00
20
- default_executable:
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
- prerelease: false
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- requirement: &id003 !ruby/object:Gem::Requirement
41
+ version_requirements: !ruby/object:Gem::Requirement
58
42
  none: false
59
- requirements:
43
+ requirements:
60
44
  - - ~>
61
- - !ruby/object:Gem::Version
62
- hash: 23
63
- segments:
64
- - 2
65
- - 6
66
- - 0
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
- version_requirements: *id003
70
- description: Instantiate one with `redis = MockRedis.new` and treat it like you would a normal Redis object. It supports all the usual Redis operations.
71
- email:
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
- hash: 3
257
- segments:
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
- hash: 3
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.3.7
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