Class: MockRedis::Database
Constant Summary
Constants included
from InfoMethod
InfoMethod::ALL_INFO, InfoMethod::CLIENTS_INFO, InfoMethod::COMMAND_STATS_COMBINED_INFO, InfoMethod::COMMAND_STATS_SOLO_INFO, InfoMethod::CPU_INFO, InfoMethod::DEFAULT_INFO, InfoMethod::KEYSPACE_INFO, InfoMethod::MEMORY_INFO, InfoMethod::PERSISTENCE_INFO, InfoMethod::REPLICATION_INFO, InfoMethod::SERVER_INFO, InfoMethod::STATS_INFO
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from InfoMethod
#info
Methods included from SortMethod
#sort
#zadd, #zcard, #zcount, #zincrby, #zinterstore, #zrange, #zrangebyscore, #zrank, #zrem, #zremrangebyrank, #zremrangebyscore, #zrevrange, #zrevrangebyscore, #zrevrank, #zscore, #zunionstore
#[], #[]=, #append, #bitcount, #decr, #decrby, #get, #getbit, #getrange, #getset, #incr, #incrby, #incrbyfloat, #mapped_mget, #mapped_mset, #mapped_msetnx, #mget, #mset, #msetnx, #set, #setbit, #setex, #setnx, #setrange, #strlen
Methods included from SetMethods
#sadd, #scard, #sdiff, #sdiffstore, #sinter, #sinterstore, #sismember, #smembers, #smove, #spop, #srandmember, #srem, #sunion, #sunionstore
#blpop, #brpop, #brpoplpush, #lindex, #linsert, #llen, #lpop, #lpush, #lpushx, #lrange, #lrem, #lset, #ltrim, #rpop, #rpoplpush, #rpush, #rpushx
#hdel, #hexists, #hget, #hgetall, #hincrby, #hincrbyfloat, #hkeys, #hlen, #hmget, #hmset, #hset, #hsetnx, #hvals, #mapped_hmget, #mapped_hmset
Constructor Details
#initialize(base, *args) ⇒ Database
Returns a new instance of Database.
24
25
26
27
28
|
# File 'lib/mock_redis/database.rb', line 24
def initialize(base, *args)
@base = base
@data = MockRedis::IndifferentHash.new
@expire_times = []
end
|
Instance Attribute Details
#data ⇒ Object
Returns the value of attribute data.
22
23
24
|
# File 'lib/mock_redis/database.rb', line 22
def data
@data
end
|
#expire_times ⇒ Object
Returns the value of attribute expire_times.
22
23
24
|
# File 'lib/mock_redis/database.rb', line 22
def expire_times
@expire_times
end
|
Instance Method Details
#auth(_) ⇒ Object
Redis commands go below this line and above ‘private’
38
|
# File 'lib/mock_redis/database.rb', line 38
def auth(_) 'OK' end
|
#bgrewriteaof ⇒ Object
40
|
# File 'lib/mock_redis/database.rb', line 40
def bgrewriteaof() "Background append only file rewriting started" end
|
#bgsave ⇒ Object
42
|
# File 'lib/mock_redis/database.rb', line 42
def bgsave() "Background saving started" end
|
#connected? ⇒ Boolean
48
49
50
|
# File 'lib/mock_redis/database.rb', line 48
def connected?
true
end
|
#dbsize ⇒ Object
52
53
54
|
# File 'lib/mock_redis/database.rb', line 52
def dbsize
data.keys.length
end
|
#del(*keys) ⇒ Object
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/mock_redis/database.rb', line 56
def del(*keys)
keys = keys.flatten.map(&:to_s)
assert_has_args(keys, 'del')
keys.
find_all{|key| data[key]}.
each {|k| persist(k)}.
each {|k| data.delete(k)}.
length
end
|
#disconnect ⇒ Object
44
45
46
|
# File 'lib/mock_redis/database.rb', line 44
def disconnect
nil
end
|
#echo(msg) ⇒ Object
67
68
69
|
# File 'lib/mock_redis/database.rb', line 67
def echo(msg)
msg.to_s
end
|
#exists(key) ⇒ Object
102
103
104
|
# File 'lib/mock_redis/database.rb', line 102
def exists(key)
data.has_key?(key)
end
|
#expire(key, seconds) ⇒ Object
71
72
73
|
# File 'lib/mock_redis/database.rb', line 71
def expire(key, seconds)
pexpire(key, seconds.to_i * 1000)
end
|
#expire_keys ⇒ Object
This method isn’t private, but it also isn’t a Redis command, so it doesn’t belong up above with all the Redis commands.
289
290
291
292
293
294
295
296
297
298
299
300
301
|
# File 'lib/mock_redis/database.rb', line 289
def expire_keys
now = @base.now
to_delete = expire_times.take_while do |(time, key)|
(time.to_r * 1_000).to_i <= (now.to_r * 1_000).to_i
end
to_delete.each do |(time, key)|
del(key)
end
expire_times.slice!(0, to_delete.length)
end
|
#expireat(key, timestamp) ⇒ Object
80
81
82
83
84
85
86
|
# File 'lib/mock_redis/database.rb', line 80
def expireat(key, timestamp)
unless looks_like_integer?(timestamp.to_s)
raise Redis::CommandError, "ERR value is not an integer or out of range"
end
pexpireat(key, timestamp.to_i * 1000)
end
|
#flushdb ⇒ Object
106
107
108
109
|
# File 'lib/mock_redis/database.rb', line 106
def flushdb
data.keys.each {|k| del(k)}
'OK'
end
|
#initialize_copy(source) ⇒ Object
30
31
32
33
34
|
# File 'lib/mock_redis/database.rb', line 30
def initialize_copy(source)
@data = @data.clone
@data.keys.each {|k| @data[k] = @data[k].clone}
@expire_times = @expire_times.map{|x| x.clone}
end
|
#keys(format = '*') ⇒ Object
111
112
113
|
# File 'lib/mock_redis/database.rb', line 111
def keys(format = '*')
data.keys.grep(redis_pattern_to_ruby_regex(format))
end
|
#lastsave ⇒ Object
115
116
117
|
# File 'lib/mock_redis/database.rb', line 115
def lastsave
@base.now.to_i
end
|
#persist(key) ⇒ Object
119
120
121
122
123
124
125
126
|
# File 'lib/mock_redis/database.rb', line 119
def persist(key)
if exists(key) && has_expiration?(key)
remove_expiration(key)
true
else
false
end
end
|
#pexpire(key, ms) ⇒ Object
75
76
77
78
|
# File 'lib/mock_redis/database.rb', line 75
def pexpire(key, ms)
now_ms = (@base.now.to_r * 1000).to_i
pexpireat(key, now_ms + ms.to_i)
end
|
#pexpireat(key, timestamp_ms) ⇒ Object
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/mock_redis/database.rb', line 88
def pexpireat(key, timestamp_ms)
unless looks_like_integer?(timestamp_ms.to_s)
raise Redis::CommandError, "ERR value is not an integer or out of range"
end
if exists(key)
timestamp = Rational(timestamp_ms.to_i, 1000)
set_expiration(key, @base.time_at(timestamp))
true
else
false
end
end
|
#ping ⇒ Object
128
129
130
|
# File 'lib/mock_redis/database.rb', line 128
def ping
'PONG'
end
|
#pttl(key) ⇒ Object
182
183
184
185
186
187
188
189
190
|
# File 'lib/mock_redis/database.rb', line 182
def pttl(key)
if !exists(key)
-2
elsif has_expiration?(key)
(expiration(key).to_r * 1000).to_i - (@base.now.to_r * 1000).to_i
else
-1
end
end
|
#quit ⇒ Object
132
133
134
|
# File 'lib/mock_redis/database.rb', line 132
def quit
'OK'
end
|
#randomkey ⇒ Object
136
137
138
|
# File 'lib/mock_redis/database.rb', line 136
def randomkey
data.keys[rand(data.length)]
end
|
#rename(key, newkey) ⇒ Object
140
141
142
143
144
145
146
147
148
149
150
151
152
|
# File 'lib/mock_redis/database.rb', line 140
def rename(key, newkey)
if !data.include?(key)
raise Redis::CommandError, "ERR no such key"
elsif key == newkey
raise Redis::CommandError, "ERR source and destination objects are the same"
end
data[newkey] = data.delete(key)
if has_expiration?(key)
set_expiration(newkey, expiration(key))
remove_expiration(key)
end
'OK'
end
|
#renamenx(key, newkey) ⇒ Object
154
155
156
157
158
159
160
161
162
163
164
165
166
|
# File 'lib/mock_redis/database.rb', line 154
def renamenx(key, newkey)
if !data.include?(key)
raise Redis::CommandError, "ERR no such key"
elsif key == newkey
raise Redis::CommandError, "ERR source and destination objects are the same"
end
if exists(newkey)
false
else
rename(key, newkey)
true
end
end
|
#save ⇒ Object
168
169
170
|
# File 'lib/mock_redis/database.rb', line 168
def save
'OK'
end
|
#ttl(key) ⇒ Object
172
173
174
175
176
177
178
179
180
|
# File 'lib/mock_redis/database.rb', line 172
def ttl(key)
if !exists(key)
-2
elsif has_expiration?(key)
expiration(key).to_i - @base.now.to_i
else
-1
end
end
|
#type(key) ⇒ Object
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
# File 'lib/mock_redis/database.rb', line 192
def type(key)
if !exists(key)
'none'
elsif hashy?(key)
'hash'
elsif stringy?(key)
'string'
elsif listy?(key)
'list'
elsif sety?(key)
'set'
elsif zsety?(key)
'zset'
else
raise ArgumentError, "Not sure how #{data[key].inspect} got in here"
end
end
|