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.
@@ -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