mock_redis 0.14.1 → 0.15.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.overcommit.yml +1 -1
- data/.rubocop.yml +91 -0
- data/.simplecov +4 -0
- data/.travis.yml +14 -2
- data/CHANGELOG.md +4 -0
- data/Gemfile +4 -2
- data/README.md +1 -0
- data/Rakefile +2 -2
- data/lib/mock_redis.rb +25 -26
- data/lib/mock_redis/assertions.rb +0 -1
- data/lib/mock_redis/database.rb +35 -28
- data/lib/mock_redis/expire_wrapper.rb +1 -1
- data/lib/mock_redis/future.rb +1 -1
- data/lib/mock_redis/hash_methods.rb +18 -17
- data/lib/mock_redis/indifferent_hash.rb +4 -0
- data/lib/mock_redis/info_method.rb +109 -108
- data/lib/mock_redis/list_methods.rb +17 -16
- data/lib/mock_redis/multi_db_wrapper.rb +5 -4
- data/lib/mock_redis/pipelined_wrapper.rb +3 -3
- data/lib/mock_redis/set_methods.rb +10 -9
- data/lib/mock_redis/sort_method.rb +11 -12
- data/lib/mock_redis/string_methods.rb +26 -29
- data/lib/mock_redis/transaction_wrapper.rb +7 -8
- data/lib/mock_redis/utility_methods.rb +9 -12
- data/lib/mock_redis/version.rb +1 -1
- data/lib/mock_redis/zset.rb +22 -23
- data/lib/mock_redis/zset_methods.rb +25 -25
- data/spec/cloning_spec.rb +17 -18
- data/spec/commands/append_spec.rb +4 -4
- data/spec/commands/auth_spec.rb +1 -1
- data/spec/commands/bgrewriteaof_spec.rb +2 -2
- data/spec/commands/bgsave_spec.rb +2 -2
- data/spec/commands/bitcount_spec.rb +3 -3
- data/spec/commands/blpop_spec.rb +10 -10
- data/spec/commands/brpop_spec.rb +10 -10
- data/spec/commands/brpoplpush_spec.rb +9 -9
- data/spec/commands/connected_spec.rb +2 -2
- data/spec/commands/dbsize_spec.rb +3 -3
- data/spec/commands/decr_spec.rb +7 -7
- data/spec/commands/decrby_spec.rb +7 -7
- data/spec/commands/del_spec.rb +4 -4
- data/spec/commands/disconnect_spec.rb +2 -2
- data/spec/commands/echo_spec.rb +4 -4
- data/spec/commands/exists_spec.rb +3 -3
- data/spec/commands/expire_spec.rb +13 -13
- data/spec/commands/expireat_spec.rb +6 -7
- data/spec/commands/flushall_spec.rb +5 -5
- data/spec/commands/flushdb_spec.rb +5 -5
- data/spec/commands/future_spec.rb +2 -2
- data/spec/commands/get_spec.rb +7 -7
- data/spec/commands/getbit_spec.rb +6 -6
- data/spec/commands/getrange_spec.rb +9 -9
- data/spec/commands/getset_spec.rb +7 -7
- data/spec/commands/hash_operator_spec.rb +5 -5
- data/spec/commands/hdel_spec.rb +12 -12
- data/spec/commands/hexists_spec.rb +7 -7
- data/spec/commands/hget_spec.rb +7 -7
- data/spec/commands/hgetall_spec.rb +6 -6
- data/spec/commands/hincrby_spec.rb +14 -14
- data/spec/commands/hincrbyfloat_spec.rb +14 -14
- data/spec/commands/hkeys_spec.rb +5 -5
- data/spec/commands/hlen_spec.rb +5 -5
- data/spec/commands/hmget_spec.rb +8 -8
- data/spec/commands/hmset_spec.rb +10 -10
- data/spec/commands/hset_spec.rb +11 -11
- data/spec/commands/hsetnx_spec.rb +14 -14
- data/spec/commands/hvals_spec.rb +5 -5
- data/spec/commands/incr_spec.rb +7 -7
- data/spec/commands/incrby_spec.rb +11 -11
- data/spec/commands/incrbyfloat_spec.rb +11 -11
- data/spec/commands/info_spec.rb +30 -30
- data/spec/commands/keys_spec.rb +42 -43
- data/spec/commands/lastsave_spec.rb +2 -2
- data/spec/commands/lindex_spec.rb +15 -15
- data/spec/commands/linsert_spec.rb +13 -13
- data/spec/commands/llen_spec.rb +4 -4
- data/spec/commands/lpop_spec.rb +6 -6
- data/spec/commands/lpush_spec.rb +16 -16
- data/spec/commands/lpushx_spec.rb +13 -13
- data/spec/commands/lrange_spec.rb +12 -12
- data/spec/commands/lrem_spec.rb +15 -15
- data/spec/commands/lset_spec.rb +12 -12
- data/spec/commands/ltrim_spec.rb +9 -9
- data/spec/commands/mapped_hmget_spec.rb +8 -8
- data/spec/commands/mapped_hmset_spec.rb +12 -12
- data/spec/commands/mapped_mget_spec.rb +4 -4
- data/spec/commands/mapped_mset_spec.rb +1 -1
- data/spec/commands/mget_spec.rb +11 -11
- data/spec/commands/move_spec.rb +29 -29
- data/spec/commands/mset_spec.rb +4 -4
- data/spec/commands/msetnx_spec.rb +10 -10
- data/spec/commands/persist_spec.rb +9 -10
- data/spec/commands/pexpire_spec.rb +12 -13
- data/spec/commands/pexpireat_spec.rb +6 -6
- data/spec/commands/ping_spec.rb +1 -1
- data/spec/commands/pipelined_spec.rb +5 -5
- data/spec/commands/pttl_spec.rb +5 -5
- data/spec/commands/randomkey_spec.rb +3 -3
- data/spec/commands/rename_spec.rb +9 -9
- data/spec/commands/renamenx_spec.rb +10 -10
- data/spec/commands/rpop_spec.rb +6 -6
- data/spec/commands/rpoplpush_spec.rb +7 -7
- data/spec/commands/rpush_spec.rb +16 -16
- data/spec/commands/rpushx_spec.rb +13 -13
- data/spec/commands/sadd_spec.rb +8 -9
- data/spec/commands/scan_spec.rb +6 -7
- data/spec/commands/scard_spec.rb +3 -3
- data/spec/commands/sdiff_spec.rb +10 -10
- data/spec/commands/sdiffstore_spec.rb +10 -10
- data/spec/commands/select_spec.rb +7 -7
- data/spec/commands/setbit_spec.rb +13 -13
- data/spec/commands/setex_spec.rb +4 -4
- data/spec/commands/setnx_spec.rb +4 -4
- data/spec/commands/setrange_spec.rb +12 -12
- data/spec/commands/sinter_spec.rb +8 -10
- data/spec/commands/sinterstore_spec.rb +9 -9
- data/spec/commands/sismember_spec.rb +5 -5
- data/spec/commands/smembers_spec.rb +5 -5
- data/spec/commands/smove_spec.rb +7 -7
- data/spec/commands/sort_list_spec.rb +3 -3
- data/spec/commands/sort_set_spec.rb +3 -3
- data/spec/commands/sort_zset_spec.rb +3 -3
- data/spec/commands/spop_spec.rb +4 -4
- data/spec/commands/srandmember_spec.rb +8 -8
- data/spec/commands/srem_spec.rb +9 -9
- data/spec/commands/strlen_spec.rb +4 -4
- data/spec/commands/sunion_spec.rb +7 -9
- data/spec/commands/sunionstore_spec.rb +9 -9
- data/spec/commands/ttl_spec.rb +5 -5
- data/spec/commands/type_spec.rb +1 -1
- data/spec/commands/zadd_spec.rb +10 -10
- data/spec/commands/zcard_spec.rb +4 -4
- data/spec/commands/zcount_spec.rb +14 -14
- data/spec/commands/zincrby_spec.rb +6 -6
- data/spec/commands/zinterstore_spec.rb +17 -17
- data/spec/commands/zrange_spec.rb +12 -12
- data/spec/commands/zrangebyscore_spec.rb +26 -26
- data/spec/commands/zrank_spec.rb +4 -4
- data/spec/commands/zrem_spec.rb +9 -9
- data/spec/commands/zremrangebyrank_spec.rb +5 -5
- data/spec/commands/zremrangebyscore_spec.rb +9 -7
- data/spec/commands/zrevrange_spec.rb +10 -10
- data/spec/commands/zrevrangebyscore_spec.rb +14 -14
- data/spec/commands/zrevrank_spec.rb +4 -4
- data/spec/commands/zscore_spec.rb +5 -5
- data/spec/commands/zunionstore_spec.rb +18 -18
- data/spec/mock_redis_spec.rb +11 -1
- data/spec/spec_helper.rb +13 -4
- data/spec/support/redis_multiplexer.rb +39 -31
- data/spec/support/shared_examples/only_operates_on_hashes.rb +2 -2
- data/spec/support/shared_examples/only_operates_on_lists.rb +2 -2
- data/spec/support/shared_examples/only_operates_on_sets.rb +2 -2
- data/spec/support/shared_examples/only_operates_on_strings.rb +3 -3
- data/spec/support/shared_examples/only_operates_on_zsets.rb +12 -12
- data/spec/support/shared_examples/sorts_enumerables.rb +12 -12
- data/spec/transactions_spec.rb +18 -18
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01d1bfd5cf966db9fd2883757cb12f2c59f09d57
|
4
|
+
data.tar.gz: 80260a25e033a419eac875729b5e04be332b819f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33c9fde7412bf24e0180010c048fb80265e98b620d445765377f590286240063b5fd018cc6398d989f74084eccfaebe5c4333ad8f51db8af4c2dab9eb7d04136
|
7
|
+
data.tar.gz: 25739a7c7e6ec24ccc0079966116c9e2c6bf85011da0b17e4a308407ce1d44332416a41258affeb86855239637175c1d593d949120b4b620d0cb14e576539c10
|
data/.gitignore
CHANGED
data/.overcommit.yml
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
Lint/AssignmentInCondition:
|
2
|
+
Enabled: false
|
3
|
+
|
4
|
+
# We use this a lot in specs where it's perfectly valid
|
5
|
+
Lint/Void:
|
6
|
+
Exclude:
|
7
|
+
- spec/**/*
|
8
|
+
|
9
|
+
Metrics/AbcSize:
|
10
|
+
Enabled: false
|
11
|
+
|
12
|
+
Metrics/CyclomaticComplexity:
|
13
|
+
Enabled: false
|
14
|
+
|
15
|
+
Metrics/ClassLength:
|
16
|
+
Enabled: false
|
17
|
+
|
18
|
+
Metrics/LineLength:
|
19
|
+
Max: 100
|
20
|
+
|
21
|
+
Metrics/MethodLength:
|
22
|
+
Enabled: false
|
23
|
+
|
24
|
+
Metrics/ModuleLength:
|
25
|
+
Enabled: false
|
26
|
+
|
27
|
+
Metrics/PerceivedComplexity:
|
28
|
+
Enabled: false
|
29
|
+
|
30
|
+
Style/AlignParameters:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
Style/Documentation:
|
34
|
+
Enabled: false
|
35
|
+
|
36
|
+
Style/DotPosition:
|
37
|
+
Enabled: false
|
38
|
+
|
39
|
+
Style/DoubleNegation:
|
40
|
+
Enabled: false
|
41
|
+
|
42
|
+
Style/GuardClause:
|
43
|
+
Enabled: false
|
44
|
+
|
45
|
+
Style/HashSyntax:
|
46
|
+
Enabled: false
|
47
|
+
|
48
|
+
Style/IfUnlessModifier:
|
49
|
+
Enabled: false
|
50
|
+
|
51
|
+
Style/Lambda:
|
52
|
+
Enabled: false
|
53
|
+
|
54
|
+
Style/MultilineBlockChain:
|
55
|
+
Enabled: false
|
56
|
+
|
57
|
+
# Prefer curly braces except for %i/%w/%W, since those return arrays.
|
58
|
+
Style/PercentLiteralDelimiters:
|
59
|
+
PreferredDelimiters:
|
60
|
+
'%': '{}'
|
61
|
+
'%i': '[]'
|
62
|
+
'%q': '{}'
|
63
|
+
'%Q': '{}'
|
64
|
+
'%r': '{}'
|
65
|
+
'%s': '()'
|
66
|
+
'%w': '[]'
|
67
|
+
'%W': '[]'
|
68
|
+
'%x': '{}'
|
69
|
+
|
70
|
+
Style/PerlBackrefs:
|
71
|
+
Enabled: false
|
72
|
+
|
73
|
+
# This hides the has-a versus is-a relationship indicated by the method name
|
74
|
+
Style/PredicateName:
|
75
|
+
Enabled: false
|
76
|
+
|
77
|
+
Style/RescueModifier:
|
78
|
+
Enabled: false
|
79
|
+
|
80
|
+
Style/SignalException:
|
81
|
+
Enabled: false
|
82
|
+
|
83
|
+
Style/SingleLineBlockParams:
|
84
|
+
Enabled: false
|
85
|
+
|
86
|
+
# End last item of a muli-line list with a comma for better diffs in future
|
87
|
+
Style/TrailingComma:
|
88
|
+
EnforcedStyleForMultiline: comma
|
89
|
+
|
90
|
+
Style/WhenThen:
|
91
|
+
Enabled: false
|
data/.simplecov
ADDED
data/.travis.yml
CHANGED
@@ -1,14 +1,26 @@
|
|
1
1
|
language: ruby
|
2
|
+
|
3
|
+
sudo: false
|
4
|
+
|
5
|
+
cache: bundler
|
6
|
+
|
2
7
|
services:
|
3
8
|
- redis-server
|
9
|
+
|
4
10
|
rvm:
|
5
11
|
- 1.9.3
|
6
|
-
- 2.0
|
7
|
-
- 2.1
|
12
|
+
- 2.0
|
13
|
+
- 2.1
|
14
|
+
- 2.2
|
8
15
|
- jruby-19mode
|
9
16
|
|
17
|
+
before_script:
|
18
|
+
- git config --local user.email "travis@travis.ci"
|
19
|
+
- git config --local user.name "Travis CI"
|
20
|
+
|
10
21
|
script:
|
11
22
|
- bundle exec rspec
|
23
|
+
- bundle exec overcommit --run
|
12
24
|
|
13
25
|
matrix:
|
14
26
|
allow_failures:
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
@@ -4,8 +4,10 @@ source 'http://rubygems.org'
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
# Run all pre-commit hooks via Overcommit during CI runs
|
7
|
-
gem 'overcommit', '0.
|
7
|
+
gem 'overcommit', '0.26.0'
|
8
8
|
|
9
9
|
# Pin tool versions (which are executed by Overcommit) for Travis builds
|
10
|
-
gem 'rubocop', '0.
|
10
|
+
gem 'rubocop', '0.32.1'
|
11
11
|
gem 'travis', '~> 1.7'
|
12
|
+
|
13
|
+
gem 'coveralls', require: false
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
[](http://badge.fury.io/rb/mock_redis)
|
4
4
|
[](https://travis-ci.org/brigade/mock_redis)
|
5
|
+
[](https://coveralls.io/r/brigade/mock_redis)
|
5
6
|
[](https://gemnasium.com/brigade/mock_redis)
|
6
7
|
|
7
8
|
MockRedis provides the same interface as `redis-rb`, but it stores its
|
data/Rakefile
CHANGED
@@ -3,8 +3,8 @@ Bundler::GemHelper.install_tasks
|
|
3
3
|
|
4
4
|
require 'rspec/core/rake_task'
|
5
5
|
RSpec::Core::RakeTask.new(:spec) do |t|
|
6
|
-
t.rspec_opts = %w
|
7
|
-
t.pattern =
|
6
|
+
t.rspec_opts = %w[-fs --color]
|
7
|
+
t.pattern = 'spec/**/*_spec.rb'
|
8
8
|
end
|
9
9
|
|
10
10
|
task :default => :spec
|
data/lib/mock_redis.rb
CHANGED
@@ -15,14 +15,14 @@ class MockRedis
|
|
15
15
|
attr_reader :options
|
16
16
|
|
17
17
|
DEFAULTS = {
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
18
|
+
:scheme => 'redis',
|
19
|
+
:host => '127.0.0.1',
|
20
|
+
:port => 6379,
|
21
|
+
:path => nil,
|
22
|
+
:timeout => 5.0,
|
23
|
+
:password => nil,
|
24
|
+
:db => 0,
|
25
|
+
:time_class => Time,
|
26
26
|
}
|
27
27
|
|
28
28
|
def self.connect(*args)
|
@@ -36,36 +36,37 @@ class MockRedis
|
|
36
36
|
TransactionWrapper.new(
|
37
37
|
ExpireWrapper.new(
|
38
38
|
MultiDbWrapper.new(
|
39
|
-
|
39
|
+
Database.new(self, *args)))))
|
40
40
|
end
|
41
41
|
|
42
42
|
def id
|
43
|
-
"redis://#{
|
43
|
+
"redis://#{host}:#{port}/#{db}"
|
44
44
|
end
|
45
|
-
|
45
|
+
alias_method :location, :id
|
46
46
|
|
47
|
-
def call(command, &
|
48
|
-
|
47
|
+
def call(command, &_block)
|
48
|
+
send(*command)
|
49
49
|
end
|
50
50
|
|
51
51
|
def host
|
52
|
-
|
52
|
+
options[:host]
|
53
53
|
end
|
54
54
|
|
55
55
|
def port
|
56
|
-
|
56
|
+
options[:port]
|
57
57
|
end
|
58
58
|
|
59
59
|
def db
|
60
|
-
|
60
|
+
options[:db]
|
61
61
|
end
|
62
62
|
|
63
63
|
def now
|
64
|
-
|
64
|
+
options[:time_class].now
|
65
65
|
end
|
66
|
+
alias_method :time, :now
|
66
67
|
|
67
68
|
def time_at(timestamp)
|
68
|
-
|
69
|
+
options[:time_class].at(timestamp)
|
69
70
|
end
|
70
71
|
|
71
72
|
def client
|
@@ -80,7 +81,7 @@ class MockRedis
|
|
80
81
|
self
|
81
82
|
end
|
82
83
|
|
83
|
-
def respond_to?(method, include_private=false)
|
84
|
+
def respond_to?(method, include_private = false)
|
84
85
|
super || @db.respond_to?(method, include_private)
|
85
86
|
end
|
86
87
|
|
@@ -93,7 +94,6 @@ class MockRedis
|
|
93
94
|
@db = @db.clone
|
94
95
|
end
|
95
96
|
|
96
|
-
|
97
97
|
protected
|
98
98
|
|
99
99
|
def _parse_options(options)
|
@@ -101,19 +101,19 @@ class MockRedis
|
|
101
101
|
|
102
102
|
defaults = DEFAULTS.dup
|
103
103
|
|
104
|
-
url = options[:url] || ENV[
|
104
|
+
url = options[:url] || ENV['REDIS_URL']
|
105
105
|
|
106
106
|
# Override defaults from URL if given
|
107
107
|
if url
|
108
|
-
require
|
108
|
+
require 'uri'
|
109
109
|
|
110
110
|
uri = URI(url)
|
111
111
|
|
112
|
-
if uri.scheme ==
|
112
|
+
if uri.scheme == 'unix'
|
113
113
|
defaults[:path] = uri.path
|
114
114
|
else
|
115
115
|
# Require the URL to have at least a host
|
116
|
-
raise ArgumentError,
|
116
|
+
raise ArgumentError, 'invalid url' unless uri.host
|
117
117
|
|
118
118
|
defaults[:scheme] = uri.scheme
|
119
119
|
defaults[:host] = uri.host
|
@@ -126,7 +126,7 @@ class MockRedis
|
|
126
126
|
options = defaults.merge(options)
|
127
127
|
|
128
128
|
if options[:path]
|
129
|
-
options[:scheme] =
|
129
|
+
options[:scheme] = 'unix'
|
130
130
|
options.delete(:host)
|
131
131
|
options.delete(:port)
|
132
132
|
else
|
@@ -139,5 +139,4 @@ class MockRedis
|
|
139
139
|
|
140
140
|
options
|
141
141
|
end
|
142
|
-
|
143
142
|
end
|
data/lib/mock_redis/database.rb
CHANGED
@@ -21,25 +21,31 @@ class MockRedis
|
|
21
21
|
|
22
22
|
attr_reader :data, :expire_times
|
23
23
|
|
24
|
-
def initialize(base, *
|
24
|
+
def initialize(base, *_args)
|
25
25
|
@base = base
|
26
26
|
@data = MockRedis::IndifferentHash.new
|
27
27
|
@expire_times = []
|
28
28
|
end
|
29
29
|
|
30
|
-
def initialize_copy(
|
30
|
+
def initialize_copy(_source)
|
31
31
|
@data = @data.clone
|
32
|
-
@data.keys.each {|k| @data[k] = @data[k].clone}
|
33
|
-
@expire_times = @expire_times.map
|
32
|
+
@data.keys.each { |k| @data[k] = @data[k].clone }
|
33
|
+
@expire_times = @expire_times.map(&:clone)
|
34
34
|
end
|
35
35
|
|
36
36
|
# Redis commands go below this line and above 'private'
|
37
37
|
|
38
|
-
def auth(_)
|
38
|
+
def auth(_)
|
39
|
+
'OK'
|
40
|
+
end
|
39
41
|
|
40
|
-
def bgrewriteaof
|
42
|
+
def bgrewriteaof
|
43
|
+
'Background append only file rewriting started'
|
44
|
+
end
|
41
45
|
|
42
|
-
def bgsave
|
46
|
+
def bgsave
|
47
|
+
'Background saving started'
|
48
|
+
end
|
43
49
|
|
44
50
|
def disconnect
|
45
51
|
nil
|
@@ -58,9 +64,9 @@ class MockRedis
|
|
58
64
|
assert_has_args(keys, 'del')
|
59
65
|
|
60
66
|
keys.
|
61
|
-
find_all{|key| data[key]}.
|
62
|
-
each {|k| persist(k)}.
|
63
|
-
each {|k| data.delete(k)}.
|
67
|
+
find_all { |key| data[key] }.
|
68
|
+
each { |k| persist(k) }.
|
69
|
+
each { |k| data.delete(k) }.
|
64
70
|
length
|
65
71
|
end
|
66
72
|
|
@@ -79,7 +85,7 @@ class MockRedis
|
|
79
85
|
|
80
86
|
def expireat(key, timestamp)
|
81
87
|
unless looks_like_integer?(timestamp.to_s)
|
82
|
-
raise Redis::CommandError,
|
88
|
+
raise Redis::CommandError, 'ERR value is not an integer or out of range'
|
83
89
|
end
|
84
90
|
|
85
91
|
pexpireat(key, timestamp.to_i * 1000)
|
@@ -87,7 +93,7 @@ class MockRedis
|
|
87
93
|
|
88
94
|
def pexpireat(key, timestamp_ms)
|
89
95
|
unless looks_like_integer?(timestamp_ms.to_s)
|
90
|
-
raise Redis::CommandError,
|
96
|
+
raise Redis::CommandError, 'ERR value is not an integer or out of range'
|
91
97
|
end
|
92
98
|
|
93
99
|
if exists(key)
|
@@ -100,11 +106,11 @@ class MockRedis
|
|
100
106
|
end
|
101
107
|
|
102
108
|
def exists(key)
|
103
|
-
data.
|
109
|
+
data.key?(key)
|
104
110
|
end
|
105
111
|
|
106
112
|
def flushdb
|
107
|
-
data.keys.each {|k| del(k)}
|
113
|
+
data.keys.each { |k| del(k) }
|
108
114
|
'OK'
|
109
115
|
end
|
110
116
|
|
@@ -150,9 +156,9 @@ class MockRedis
|
|
150
156
|
|
151
157
|
def rename(key, newkey)
|
152
158
|
if !data.include?(key)
|
153
|
-
raise Redis::CommandError,
|
159
|
+
raise Redis::CommandError, 'ERR no such key'
|
154
160
|
elsif key == newkey
|
155
|
-
raise Redis::CommandError,
|
161
|
+
raise Redis::CommandError, 'ERR source and destination objects are the same'
|
156
162
|
end
|
157
163
|
data[newkey] = data.delete(key)
|
158
164
|
if has_expiration?(key)
|
@@ -164,9 +170,9 @@ class MockRedis
|
|
164
170
|
|
165
171
|
def renamenx(key, newkey)
|
166
172
|
if !data.include?(key)
|
167
|
-
raise Redis::CommandError,
|
173
|
+
raise Redis::CommandError, 'ERR no such key'
|
168
174
|
elsif key == newkey
|
169
|
-
raise Redis::CommandError,
|
175
|
+
raise Redis::CommandError, 'ERR source and destination objects are the same'
|
170
176
|
end
|
171
177
|
if exists(newkey)
|
172
178
|
false
|
@@ -222,9 +228,9 @@ class MockRedis
|
|
222
228
|
|
223
229
|
def assert_valid_timeout(timeout)
|
224
230
|
if !looks_like_integer?(timeout.to_s)
|
225
|
-
raise Redis::CommandError,
|
231
|
+
raise Redis::CommandError, 'ERR timeout is not an integer or out of range'
|
226
232
|
elsif timeout < 0
|
227
|
-
raise Redis::CommandError,
|
233
|
+
raise Redis::CommandError, 'ERR timeout is negative'
|
228
234
|
end
|
229
235
|
timeout
|
230
236
|
end
|
@@ -242,7 +248,7 @@ class MockRedis
|
|
242
248
|
if options.is_a?(Hash) && options[:timeout]
|
243
249
|
timeout = assert_valid_timeout(options[:timeout])
|
244
250
|
[arglist[0..-2], timeout]
|
245
|
-
elsif options.
|
251
|
+
elsif options.is_a?(Integer)
|
246
252
|
timeout = assert_valid_timeout(options)
|
247
253
|
[arglist[0..-2], timeout]
|
248
254
|
else
|
@@ -251,11 +257,11 @@ class MockRedis
|
|
251
257
|
end
|
252
258
|
|
253
259
|
def expiration(key)
|
254
|
-
expire_times.find {|(_,k)| k == key.to_s}.first
|
260
|
+
expire_times.find { |(_, k)| k == key.to_s }.first
|
255
261
|
end
|
256
262
|
|
257
263
|
def has_expiration?(key)
|
258
|
-
expire_times.any? {|(_,k)| k == key.to_s}
|
264
|
+
expire_times.any? { |(_, k)| k == key.to_s }
|
259
265
|
end
|
260
266
|
|
261
267
|
def looks_like_integer?(str)
|
@@ -270,12 +276,12 @@ class MockRedis
|
|
270
276
|
Regexp.new(
|
271
277
|
"^#{pattern}$".
|
272
278
|
gsub(/([+|()])/, '\\\\\1').
|
273
|
-
gsub(/([^\\])\?/,
|
274
|
-
gsub(/([^\\])\*/,
|
279
|
+
gsub(/([^\\])\?/, '\\1.').
|
280
|
+
gsub(/([^\\])\*/, '\\1.*'))
|
275
281
|
end
|
276
282
|
|
277
283
|
def remove_expiration(key)
|
278
|
-
expire_times.delete_if do |(
|
284
|
+
expire_times.delete_if do |(_t, k)|
|
279
285
|
key.to_s == k
|
280
286
|
end
|
281
287
|
end
|
@@ -295,16 +301,17 @@ class MockRedis
|
|
295
301
|
end
|
296
302
|
|
297
303
|
public
|
304
|
+
|
298
305
|
# This method isn't private, but it also isn't a Redis command, so
|
299
306
|
# it doesn't belong up above with all the Redis commands.
|
300
307
|
def expire_keys
|
301
308
|
now = @base.now
|
302
309
|
|
303
|
-
to_delete = expire_times.take_while do |(time,
|
310
|
+
to_delete = expire_times.take_while do |(time, _key)|
|
304
311
|
(time.to_r * 1_000).to_i <= (now.to_r * 1_000).to_i
|
305
312
|
end
|
306
313
|
|
307
|
-
to_delete.each do |(
|
314
|
+
to_delete.each do |(_time, key)|
|
308
315
|
del(key)
|
309
316
|
end
|
310
317
|
end
|