mock_redis 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,14 @@
1
+ ### 0.1.1
2
+ * Fix handling of -inf, +inf, and exclusive endpoints (e.g. "(3") in
3
+ zrangebyscore, zrevrangebyscore, and zremrangebyscore. ("Fix" here
4
+ means "write", as it's something that was completely forgotten the
5
+ first time around.)
6
+
7
+ ### 0.1.0
8
+ * Support `move(key, db)` to move keys between databases.
9
+
10
+ ### 0.0.2
11
+ * Fix gem homepage.
12
+
13
+ ### 0.0.1
14
+ Initial release.
@@ -1,3 +1,3 @@
1
1
  class MockRedis
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -40,6 +40,36 @@ class MockRedis
40
40
  members.each {|m| yield score(m), m}
41
41
  end
42
42
 
43
+ def in_range(min, max)
44
+ in_from_the_left = case min
45
+ when "-inf":
46
+ lambda { true }
47
+ when "+inf":
48
+ lambda { false }
49
+ when /\((.*)$/:
50
+ val = $1.to_f
51
+ lambda {|x| x.to_f > val }
52
+ else
53
+ lambda {|x| x.to_f >= min.to_f }
54
+ end
55
+
56
+ in_from_the_right = case max
57
+ when "-inf":
58
+ lambda { false }
59
+ when "+inf":
60
+ lambda { true }
61
+ when /\((.*)$/:
62
+ val = $1.to_f
63
+ lambda {|x| x.to_f < val }
64
+ else
65
+ lambda {|x| x.to_f <= max.to_f }
66
+ end
67
+
68
+ sorted.find_all do |(score, member)|
69
+ in_from_the_left[score] && in_from_the_right[score]
70
+ end
71
+ end
72
+
43
73
  def intersection(other)
44
74
  if !block_given?
45
75
  intersection(other, &:+)
@@ -55,10 +55,8 @@ class MockRedis
55
55
 
56
56
  def zrangebyscore(key, min, max, options={})
57
57
  with_zset_at(key) do |zset|
58
- in_range = zset.sorted.find_all do |(score, member)|
59
- min <= score && score <= max
60
- end
61
- to_response(apply_limit(in_range, options[:limit]), options)
58
+ all_results = zset.in_range(min, max)
59
+ to_response(apply_limit(all_results, options[:limit]), options)
62
60
  end
63
61
  end
64
62
 
@@ -90,10 +88,11 @@ class MockRedis
90
88
 
91
89
  def zrevrangebyscore(key, max, min, options={})
92
90
  with_zset_at(key) do |zset|
93
- in_range = zset.sorted.reverse.find_all do |(score, member)|
94
- min <= score && score <= max
95
- end
96
- to_response(apply_limit(in_range, options[:limit]), options)
91
+ to_response(
92
+ apply_limit(
93
+ zset.in_range(min, max).reverse,
94
+ options[:limit]),
95
+ options)
97
96
  end
98
97
  end
99
98
 
@@ -38,5 +38,31 @@ describe "#zrangebyscore(key, start, stop [:with_scores => true] [:limit => [off
38
38
  end.should raise_error(RuntimeError)
39
39
  end
40
40
 
41
+ it "treats scores like floats, not strings" do
42
+ @redises.zadd(@key, "10", "Tyler")
43
+ @redises.zrangebyscore(@key, 1, 2).should == ['Washington', 'Adams']
44
+ end
45
+
46
+ it "treats -inf as negative infinity" do
47
+ @redises.zrangebyscore(@key, "-inf", 3).should ==
48
+ ["Washington", "Adams", "Jefferson"]
49
+ end
50
+
51
+ it "treats +inf as positive infinity" do
52
+ @redises.zrangebyscore(@key, 3, "+inf").should == ["Jefferson", "Madison"]
53
+ end
54
+
55
+ it "treats +inf as positive infinity" do
56
+ @redises.zrangebyscore(@key, 3, "+inf").should == ["Jefferson", "Madison"]
57
+ end
58
+
59
+ it "honors exclusive ranges on the left" do
60
+ @redises.zrangebyscore(@key, "(3", 4).should == ["Madison"]
61
+ end
62
+
63
+ it "honors exclusive ranges on the right" do
64
+ @redises.zrangebyscore(@key, "3", "(4").should == ["Jefferson"]
65
+ end
66
+
41
67
  it_should_behave_like "a zset-only command"
42
68
  end
@@ -17,5 +17,12 @@ describe "#zremrangebyscore(key, min, max)" do
17
17
  @redises.zremrangebyscore(@key, 2, 3)
18
18
  @redises.zrange(@key, 0, -1).should == %w[Washington Madison]
19
19
  end
20
+
21
+ # As seen in http://redis.io/commands/zremrangebyscore
22
+ it "removes the elements for complex statements" do
23
+ @redises.zremrangebyscore(@key, '-inf', '(4')
24
+ @redises.zrange(@key, 0, -1).should == %w[Madison]
25
+ end
26
+
20
27
  it_should_behave_like "a zset-only command"
21
28
  end
@@ -23,6 +23,11 @@ describe "#zrevrangebyscore(key, start, stop [:with_scores => true] [:limit => [
23
23
  should == %w[Madison 4 Jefferson 3]
24
24
  end
25
25
 
26
+ it "treats +inf as positive infinity" do
27
+ @redises.zrevrangebyscore(@key, "+inf", 3).
28
+ should == %w[Madison Jefferson]
29
+ end
30
+
26
31
  it "honors the :limit => [offset count] argument" do
27
32
  @redises.zrevrangebyscore(@key, 100, -100, :limit => [1, 2]).
28
33
  should == ["Jefferson", "Adams"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mock_redis
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Samuel Merritt
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-18 00:00:00 -07:00
18
+ date: 2011-08-24 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -76,6 +76,7 @@ extra_rdoc_files: []
76
76
  files:
77
77
  - .gitignore
78
78
  - .rspec
79
+ - CHANGELOG.md
79
80
  - Gemfile
80
81
  - LICENSE
81
82
  - README.md