mock_redis 0.6.0 → 0.6.1

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 CHANGED
@@ -1,3 +1,7 @@
1
+ ### 0.6.1
2
+ * Support default argument of `*` for keys
3
+ * Allow `MockRedis` to take a TimeClass
4
+
1
5
  ### 0.6.0
2
6
  * Support for `#sort` (ascending and descending only)
3
7
 
data/lib/mock_redis.rb CHANGED
@@ -21,6 +21,7 @@ class MockRedis
21
21
  :timeout => 5.0,
22
22
  :password => nil,
23
23
  :db => 0,
24
+ :time_class => Time,
24
25
  }
25
26
 
26
27
  def self.connect(*args)
@@ -34,7 +35,7 @@ class MockRedis
34
35
  TransactionWrapper.new(
35
36
  ExpireWrapper.new(
36
37
  MultiDbWrapper.new(
37
- Database.new(*args)))))
38
+ Database.new(self, *args)))))
38
39
  end
39
40
 
40
41
  def id
@@ -58,6 +59,14 @@ class MockRedis
58
59
  self.options[:db]
59
60
  end
60
61
 
62
+ def now
63
+ self.options[:time_class].now
64
+ end
65
+
66
+ def time_at(timestamp)
67
+ self.options[:time_class].at(timestamp)
68
+ end
69
+
61
70
  def client
62
71
  self
63
72
  end
@@ -79,7 +88,7 @@ class MockRedis
79
88
  protected
80
89
 
81
90
  def _parse_options(options)
82
- return {} if options.nil?
91
+ return DEFAULTS.dup if options.nil?
83
92
 
84
93
  defaults = DEFAULTS.dup
85
94
 
@@ -18,7 +18,8 @@ class MockRedis
18
18
 
19
19
  attr_reader :data, :expire_times
20
20
 
21
- def initialize(*args)
21
+ def initialize(base, *args)
22
+ @base = base
22
23
  @data = {}
23
24
  @expire_times = []
24
25
  end
@@ -54,7 +55,7 @@ class MockRedis
54
55
  end
55
56
 
56
57
  def expire(key, seconds)
57
- expireat(key, Time.now.to_i + seconds.to_i)
58
+ expireat(key, @base.now.to_i + seconds.to_i)
58
59
  end
59
60
 
60
61
  def expireat(key, timestamp)
@@ -63,7 +64,7 @@ class MockRedis
63
64
  end
64
65
 
65
66
  if exists(key)
66
- set_expiration(key, Time.at(timestamp.to_i))
67
+ set_expiration(key, @base.time_at(timestamp.to_i))
67
68
  true
68
69
  else
69
70
  false
@@ -276,12 +277,12 @@ class MockRedis
276
277
  }
277
278
  end
278
279
 
279
- def keys(format)
280
+ def keys(format = '*')
280
281
  data.keys.grep(redis_pattern_to_ruby_regex(format))
281
282
  end
282
283
 
283
284
  def lastsave
284
- Time.now.to_i
285
+ @base.now.to_i
285
286
  end
286
287
 
287
288
  def persist(key)
@@ -335,7 +336,7 @@ class MockRedis
335
336
 
336
337
  def ttl(key)
337
338
  if has_expiration?(key)
338
- expiration(key).to_i - Time.now.to_i
339
+ expiration(key).to_i - @base.now.to_i
339
340
  else
340
341
  -1
341
342
  end
@@ -430,7 +431,7 @@ class MockRedis
430
431
  # This method isn't private, but it also isn't a Redis command, so
431
432
  # it doesn't belong up above with all the Redis commands.
432
433
  def expire_keys
433
- now = Time.now
434
+ now = @base.now
434
435
 
435
436
  to_delete = expire_times.take_while do |(time, key)|
436
437
  time <= now
@@ -1,3 +1,3 @@
1
1
  class MockRedis
2
- VERSION = '0.6.0'
2
+ VERSION = '0.6.1'
3
3
  end
@@ -29,4 +29,48 @@ describe MockRedis do
29
29
 
30
30
  its(:id) { should == url }
31
31
  end
32
+
33
+ describe 'Injecting a time class' do
34
+ describe '.options' do
35
+ let(:time_stub) { double 'Time' }
36
+ let(:options) { { :time_class => time_stub } }
37
+
38
+ it 'defaults to Time' do
39
+ mock_redis = MockRedis.new
40
+
41
+ mock_redis.options[:time_class].should == Time
42
+ end
43
+
44
+ it 'has a configurable Time class' do
45
+ mock_redis = MockRedis.new(options)
46
+
47
+ mock_redis.options[:time_class].should == time_stub
48
+ end
49
+ end
50
+
51
+ describe '.now' do
52
+ let(:now) { 'Now' }
53
+ let(:time_stub) { double 'Time', :now => now }
54
+ let(:options) { { :time_class => time_stub } }
55
+
56
+ subject { MockRedis.new(options) }
57
+
58
+ its(:now) { should == now }
59
+ end
60
+
61
+ describe '.expireat' do
62
+ let(:time_at) { 'expireat' }
63
+ let(:time_stub) { double 'Time' }
64
+ let(:options) { { :time_class => time_stub } }
65
+ let(:timestamp) { 123456 }
66
+
67
+ subject { MockRedis.new(options) }
68
+
69
+ it 'Forwards time_at to the time_class' do
70
+ time_stub.should_receive(:at).with(timestamp).and_return(time_at)
71
+
72
+ subject.time_at(timestamp).should == time_at
73
+ end
74
+ end
75
+ end
32
76
  end
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.6.0
4
+ version: 0.6.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-10-30 00:00:00.000000000 Z
13
+ date: 2012-11-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake