mock_redis 0.5.3 → 0.5.4
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 +5 -0
- data/lib/mock_redis/database.rb +4 -0
- data/lib/mock_redis/list_methods.rb +3 -0
- data/lib/mock_redis/string_methods.rb +16 -0
- data/lib/mock_redis/version.rb +1 -1
- data/lib/mock_redis/zset_methods.rb +4 -4
- data/spec/commands/incrbyfloat_spec.rb +44 -0
- data/spec/commands/lrem_spec.rb +4 -3
- data/spec/support/redis_multiplexer.rb +3 -0
- metadata +4 -2
data/CHANGELOG.md
CHANGED
data/lib/mock_redis/database.rb
CHANGED
@@ -372,6 +372,10 @@ class MockRedis
|
|
372
372
|
value.nil? || looks_like_integer?(value)
|
373
373
|
end
|
374
374
|
|
375
|
+
def can_incr_float?(value)
|
376
|
+
value.nil? || looks_like_float?(value)
|
377
|
+
end
|
378
|
+
|
375
379
|
def extract_timeout(arglist)
|
376
380
|
timeout = assert_valid_timeout(arglist.last)
|
377
381
|
[arglist[0..-2], arglist.last]
|
@@ -75,6 +75,22 @@ class MockRedis
|
|
75
75
|
new_value
|
76
76
|
end
|
77
77
|
|
78
|
+
def incrbyfloat(key, n)
|
79
|
+
assert_stringy(key)
|
80
|
+
unless can_incr_float?(data[key])
|
81
|
+
raise Redis::CommandError, "ERR value is not a valid float"
|
82
|
+
end
|
83
|
+
|
84
|
+
unless looks_like_float?(n.to_s)
|
85
|
+
raise Redis::CommandError, "ERR value is not a valid float"
|
86
|
+
end
|
87
|
+
|
88
|
+
new_value = data[key].to_f + n.to_f
|
89
|
+
data[key] = new_value.to_s
|
90
|
+
# for some reason, redis-rb doesn't return this as a string.
|
91
|
+
new_value
|
92
|
+
end
|
93
|
+
|
78
94
|
def mget(*keys)
|
79
95
|
assert_has_args(keys, 'mget')
|
80
96
|
|
data/lib/mock_redis/version.rb
CHANGED
@@ -42,8 +42,8 @@ class MockRedis
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def zcount(key, min, max)
|
45
|
-
assert_scorey(min, 'min or max') unless min == '-inf'
|
46
|
-
assert_scorey(max, 'min or max') unless max == '+inf'
|
45
|
+
assert_scorey(min, 'ERR min or max is not a float') unless min == '-inf'
|
46
|
+
assert_scorey(max, 'ERR min or max is not a float') unless max == '+inf'
|
47
47
|
|
48
48
|
with_zset_at(key) do |zset|
|
49
49
|
zset.in_range(min, max).size
|
@@ -230,9 +230,9 @@ class MockRedis
|
|
230
230
|
!!Float(x) rescue false
|
231
231
|
end
|
232
232
|
|
233
|
-
def assert_scorey(value,
|
233
|
+
def assert_scorey(value, message = "ERR value is not a valid float")
|
234
234
|
unless looks_like_float?(value)
|
235
|
-
raise Redis::CommandError,
|
235
|
+
raise Redis::CommandError, message
|
236
236
|
end
|
237
237
|
end
|
238
238
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe '#incrbyfloat(key, increment)' do
|
4
|
+
before { @key = 'mock-redis-test:65374' }
|
5
|
+
|
6
|
+
it "returns the value after the increment" do
|
7
|
+
@redises.set(@key, 2.0)
|
8
|
+
@redises.incrbyfloat(@key, 2.1).should be_within(0.0001).of(4.1)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "treats a missing key like 0" do
|
12
|
+
@redises.incrbyfloat(@key, 1.2).should be_within(0.0001).of(1.2)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "increments negative numbers" do
|
16
|
+
@redises.set(@key, -10.4)
|
17
|
+
@redises.incrbyfloat(@key, 2.3).should be_within(0.0001).of(-8.1)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "works multiple times" do
|
21
|
+
@redises.incrbyfloat(@key, 2.1).should be_within(0.0001).of(2.1)
|
22
|
+
@redises.incrbyfloat(@key, 2.2).should be_within(0.0001).of(4.3)
|
23
|
+
@redises.incrbyfloat(@key, 2.3).should be_within(0.0001).of(6.6)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "accepts an float-ish string" do
|
27
|
+
@redises.incrbyfloat(@key, "2.2").should be_within(0.0001).of(2.2)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "raises an error if the value does not look like an float" do
|
31
|
+
@redises.set(@key, "one.two")
|
32
|
+
lambda do
|
33
|
+
@redises.incrbyfloat(@key, 1)
|
34
|
+
end.should raise_error(RuntimeError)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "raises an error if the delta does not look like an float" do
|
38
|
+
lambda do
|
39
|
+
@redises.incrbyfloat(@key, "foobar.baz")
|
40
|
+
end.should raise_error(RuntimeError)
|
41
|
+
end
|
42
|
+
|
43
|
+
it_should_behave_like "a string-only command"
|
44
|
+
end
|
data/spec/commands/lrem_spec.rb
CHANGED
@@ -61,9 +61,10 @@ describe "#lrem(key, count, value)" do
|
|
61
61
|
@redises.lrem(@key, 0, "beer").should == 0
|
62
62
|
end
|
63
63
|
|
64
|
-
it "
|
65
|
-
|
66
|
-
|
64
|
+
it "raises an error if the value does not look like an integer" do
|
65
|
+
lambda do
|
66
|
+
@redises.lrem(@key, 'foo', 'bottles')
|
67
|
+
end.should raise_error(RuntimeError)
|
67
68
|
end
|
68
69
|
|
69
70
|
it "removes empty lists" do
|
@@ -69,6 +69,9 @@ class RedisMultiplexer < BlankSlate
|
|
69
69
|
a.collect(&:to_s).sort == b.collect(&:to_s).sort
|
70
70
|
elsif a.is_a?(Exception) && b.is_a?(Exception)
|
71
71
|
a.class == b.class && a.message == b.message
|
72
|
+
elsif a.is_a?(Float) && b.is_a?(Float)
|
73
|
+
delta = [a.abs, b.abs].min / 1_000_000.0
|
74
|
+
(a - b).abs < delta
|
72
75
|
else
|
73
76
|
false
|
74
77
|
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.5.
|
4
|
+
version: 0.5.4
|
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-
|
13
|
+
date: 2012-10-24 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- spec/commands/hvals_spec.rb
|
132
132
|
- spec/commands/incr_spec.rb
|
133
133
|
- spec/commands/incrby_spec.rb
|
134
|
+
- spec/commands/incrbyfloat_spec.rb
|
134
135
|
- spec/commands/info_spec.rb
|
135
136
|
- spec/commands/keys_spec.rb
|
136
137
|
- spec/commands/lastsave_spec.rb
|
@@ -274,6 +275,7 @@ test_files:
|
|
274
275
|
- spec/commands/hvals_spec.rb
|
275
276
|
- spec/commands/incr_spec.rb
|
276
277
|
- spec/commands/incrby_spec.rb
|
278
|
+
- spec/commands/incrbyfloat_spec.rb
|
277
279
|
- spec/commands/info_spec.rb
|
278
280
|
- spec/commands/keys_spec.rb
|
279
281
|
- spec/commands/lastsave_spec.rb
|