mock_redis 0.28.0 → 0.29.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +1 -1
- data/lib/mock_redis.rb +32 -1
- data/lib/mock_redis/hash_methods.rb +5 -0
- data/lib/mock_redis/version.rb +1 -1
- data/lib/mock_redis/zset.rb +1 -6
- data/spec/commands/hdel_spec.rb +7 -0
- data/spec/commands/zadd_spec.rb +6 -0
- data/spec/mock_redis_spec.rb +9 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2607bfdcb34be30d5f98395241f578ca9980f73b1d2f1ac37fa3a1baa736ba1
|
4
|
+
data.tar.gz: 7b4c15ece6a897bfa29c86512f9364b73b03eed78dc4764e4c542a056ec5c472
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28d6b6302b703e48245d3bb0e2511d446c5a58bd3620eabbfa806f1c58835b48ac4f2082961a8e1110fca1b1246cc1b9c06cb590d8e8eb53facb2716e98fec9f
|
7
|
+
data.tar.gz: 2d749de988854e1bb5ff64e38f596d1f0efa508e2e78ab90980f86d217e791be617851bc0aaa8593a0497c233258256544e95fe86bc50ff784140a6a63b83e9b
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# MockRedis Changelog
|
2
2
|
|
3
|
+
### 0.29.0
|
4
|
+
|
5
|
+
* Add support for `logger` option ([#211](https://github.com/sds/mock_redis/pull/211))
|
6
|
+
* Fix `zadd` to not perform conditional type conversion ([#214](https://github.com/sds/mock_redis/pull/214))
|
7
|
+
* Fix `hdel` to raise error when called with empty array ([#215](https://github.com/sds/mock_redis/pull/215))
|
8
|
+
|
3
9
|
### 0.28.0
|
4
10
|
|
5
11
|
* Fix `hmset` exception ([#206](https://github.com/sds/mock_redis/pull/206))
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ for use in tests.
|
|
12
12
|
|
13
13
|
* Ruby 2.4+
|
14
14
|
|
15
|
-
The current implementation is tested against **Redis
|
15
|
+
The current implementation is tested against **Redis 6**. Older versions may work, but can also return different results or not support some commands.
|
16
16
|
|
17
17
|
## Getting Started
|
18
18
|
|
data/lib/mock_redis.rb
CHANGED
@@ -22,6 +22,7 @@ class MockRedis
|
|
22
22
|
:path => nil,
|
23
23
|
:timeout => 5.0,
|
24
24
|
:password => nil,
|
25
|
+
:logger => nil,
|
25
26
|
:db => 0,
|
26
27
|
:time_class => Time,
|
27
28
|
}.freeze
|
@@ -65,6 +66,10 @@ class MockRedis
|
|
65
66
|
options[:db]
|
66
67
|
end
|
67
68
|
|
69
|
+
def logger
|
70
|
+
options[:logger]
|
71
|
+
end
|
72
|
+
|
68
73
|
def time_at(timestamp)
|
69
74
|
options[:time_class].at(timestamp)
|
70
75
|
end
|
@@ -86,7 +91,9 @@ class MockRedis
|
|
86
91
|
end
|
87
92
|
|
88
93
|
ruby2_keywords def method_missing(method, *args, &block)
|
89
|
-
|
94
|
+
logging([[method, *args]]) do
|
95
|
+
@db.send(method, *args, &block)
|
96
|
+
end
|
90
97
|
end
|
91
98
|
|
92
99
|
def initialize_copy(source)
|
@@ -139,4 +146,28 @@ class MockRedis
|
|
139
146
|
|
140
147
|
options
|
141
148
|
end
|
149
|
+
|
150
|
+
def logging(commands)
|
151
|
+
return yield unless logger&.debug?
|
152
|
+
|
153
|
+
begin
|
154
|
+
commands.each do |name, *args|
|
155
|
+
logged_args = args.map do |a|
|
156
|
+
if a.respond_to?(:inspect) then a.inspect
|
157
|
+
elsif a.respond_to?(:to_s) then a.to_s
|
158
|
+
else
|
159
|
+
# handle poorly-behaved descendants of BasicObject
|
160
|
+
klass = a.instance_exec { (class << self; self end).superclass }
|
161
|
+
"\#<#{klass}:#{a.__id__}>"
|
162
|
+
end
|
163
|
+
end
|
164
|
+
logger.debug("[MockRedis] command=#{name.to_s.upcase} args=#{logged_args.join(' ')}")
|
165
|
+
end
|
166
|
+
|
167
|
+
t1 = Time.now
|
168
|
+
yield
|
169
|
+
ensure
|
170
|
+
logger.debug("[MockRedis] call_time=%0.2f ms" % ((Time.now - t1) * 1000)) if t1
|
171
|
+
end
|
172
|
+
end
|
142
173
|
end
|
@@ -10,6 +10,11 @@ class MockRedis
|
|
10
10
|
with_hash_at(key) do |hash|
|
11
11
|
orig_size = hash.size
|
12
12
|
fields = Array(fields).flatten.map(&:to_s)
|
13
|
+
|
14
|
+
if fields.empty?
|
15
|
+
raise Redis::CommandError, "ERR wrong number of arguments for 'hdel' command"
|
16
|
+
end
|
17
|
+
|
13
18
|
hash.delete_if { |k, _v| fields.include?(k) }
|
14
19
|
orig_size - hash.size
|
15
20
|
end
|
data/lib/mock_redis/version.rb
CHANGED
data/lib/mock_redis/zset.rb
CHANGED
data/spec/commands/hdel_spec.rb
CHANGED
@@ -66,5 +66,12 @@ describe '#hdel(key, field)' do
|
|
66
66
|
@redises.get(@key).should be_nil
|
67
67
|
end
|
68
68
|
|
69
|
+
it 'raises error if an empty array is passed' do
|
70
|
+
expect { @redises.hdel(@key, []) }.to raise_error(
|
71
|
+
Redis::CommandError,
|
72
|
+
"ERR wrong number of arguments for 'hdel' command"
|
73
|
+
)
|
74
|
+
end
|
75
|
+
|
69
76
|
it_should_behave_like 'a hash-only command'
|
70
77
|
end
|
data/spec/commands/zadd_spec.rb
CHANGED
@@ -23,6 +23,12 @@ describe '#zadd(key, score, member)' do
|
|
23
23
|
@redises.zrange(@key, 0, -1).should == [member.to_s]
|
24
24
|
end
|
25
25
|
|
26
|
+
it 'allows scores to be set to Float::INFINITY' do
|
27
|
+
member = '1'
|
28
|
+
@redises.zadd(@key, Float::INFINITY, member)
|
29
|
+
@redises.zrange(@key, 0, -1).should == [member]
|
30
|
+
end
|
31
|
+
|
26
32
|
it 'updates the score' do
|
27
33
|
@redises.zadd(@key, 1, 'foo')
|
28
34
|
@redises.zadd(@key, 2, 'foo')
|
data/spec/mock_redis_spec.rb
CHANGED
@@ -81,4 +81,13 @@ describe MockRedis do
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
84
|
+
|
85
|
+
describe 'supplying a logger' do
|
86
|
+
it 'logs redis commands' do
|
87
|
+
logger = double('Logger', debug?: true, debug: nil)
|
88
|
+
mock_redis = MockRedis.new(logger: logger)
|
89
|
+
expect(logger).to receive(:debug).with(/command=HMGET args="hash" "key1" "key2"/)
|
90
|
+
mock_redis.hmget("hash", "key1", "key2")
|
91
|
+
end
|
92
|
+
end
|
84
93
|
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.
|
4
|
+
version: 0.29.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane da Silva
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-
|
12
|
+
date: 2021-08-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby2_keywords
|