redis-namespace 0.10.0 → 1.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.
Potentially problematic release.
This version of redis-namespace might be problematic. Click here for more details.
- data/README.md +12 -2
- data/Rakefile +1 -1
- data/lib/redis/namespace.rb +25 -2
- data/spec/redis_spec.rb +30 -2
- data/spec/spec_helper.rb +10 -2
- metadata +12 -6
data/README.md
CHANGED
@@ -5,8 +5,10 @@ Requires the redis gem.
|
|
5
5
|
|
6
6
|
Namespaces all Redis calls.
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
``` ruby
|
9
|
+
r = Redis::Namespace.new(:ns, :redis => @r)
|
10
|
+
r['foo'] = 1000
|
11
|
+
```
|
10
12
|
|
11
13
|
This will perform the equivalent of:
|
12
14
|
|
@@ -21,6 +23,14 @@ Installation
|
|
21
23
|
$ gem install redis-namespace
|
22
24
|
|
23
25
|
|
26
|
+
|
27
|
+
Testing
|
28
|
+
=======
|
29
|
+
|
30
|
+
$ bundle install
|
31
|
+
$ rake
|
32
|
+
|
33
|
+
|
24
34
|
Author
|
25
35
|
=====
|
26
36
|
|
data/Rakefile
CHANGED
data/lib/redis/namespace.rb
CHANGED
@@ -45,6 +45,7 @@ class Redis
|
|
45
45
|
"blpop" => [ :exclude_last ],
|
46
46
|
"brpop" => [ :exclude_last ],
|
47
47
|
"dbsize" => [],
|
48
|
+
"debug" => [ :exclude_first ],
|
48
49
|
"decr" => [ :first ],
|
49
50
|
"decrby" => [ :first ],
|
50
51
|
"del" => [ :all ],
|
@@ -55,6 +56,7 @@ class Redis
|
|
55
56
|
"get" => [ :first ],
|
56
57
|
"getset" => [ :first ],
|
57
58
|
"hset" => [ :first ],
|
59
|
+
"hsetnx" => [ :first ],
|
58
60
|
"hget" => [ :first ],
|
59
61
|
"hincrby" => [ :first ],
|
60
62
|
"hmget" => [ :first ],
|
@@ -78,6 +80,7 @@ class Redis
|
|
78
80
|
"lrem" => [ :first ],
|
79
81
|
"lset" => [ :first ],
|
80
82
|
"ltrim" => [ :first ],
|
83
|
+
"mapped_hmset" => [ :first ],
|
81
84
|
"mapped_mget" => [ :all, :all ],
|
82
85
|
"mget" => [ :all ],
|
83
86
|
"monitor" => [ :monitor ],
|
@@ -122,6 +125,7 @@ class Redis
|
|
122
125
|
"unsubscribe" => [ :all ],
|
123
126
|
"zadd" => [ :first ],
|
124
127
|
"zcard" => [ :first ],
|
128
|
+
"zcount" => [ :first ],
|
125
129
|
"zincrby" => [ :first ],
|
126
130
|
"zrange" => [ :first ],
|
127
131
|
"zrangebyscore" => [ :first ],
|
@@ -156,8 +160,14 @@ class Redis
|
|
156
160
|
method_missing(:type, key)
|
157
161
|
end
|
158
162
|
|
163
|
+
alias_method :self_respond_to?, :respond_to?
|
164
|
+
|
159
165
|
def respond_to?(command)
|
160
|
-
|
166
|
+
if self_respond_to?(command)
|
167
|
+
true
|
168
|
+
else
|
169
|
+
@redis.respond_to?(command)
|
170
|
+
end
|
161
171
|
end
|
162
172
|
|
163
173
|
def keys(query = nil)
|
@@ -165,9 +175,17 @@ class Redis
|
|
165
175
|
end
|
166
176
|
|
167
177
|
def method_missing(command, *args, &block)
|
168
|
-
|
178
|
+
handling = COMMANDS[command.to_s] ||
|
169
179
|
COMMANDS[ALIASES[command.to_s]]
|
170
180
|
|
181
|
+
if handling.nil?
|
182
|
+
warn("redis-namespace does not know how to handle '#{command}' command.
|
183
|
+
Passing it to redis as is.")
|
184
|
+
return
|
185
|
+
end
|
186
|
+
|
187
|
+
(before, after) = handling
|
188
|
+
|
171
189
|
# Add the namespace to any parameters that are keys.
|
172
190
|
case before
|
173
191
|
when :first
|
@@ -184,6 +202,11 @@ class Redis
|
|
184
202
|
args.push(last) if last
|
185
203
|
when :alternate
|
186
204
|
args.each_with_index { |a, i| args[i] = add_namespace(a) if i.even? }
|
205
|
+
when :sort
|
206
|
+
args[0] = add_namespace(args[0]) if args[0]
|
207
|
+
[:by, :get, :store].each do |key|
|
208
|
+
args[1][key] = add_namespace(args[1][key]) if args[1][key]
|
209
|
+
end if args[1].is_a?(Hash)
|
187
210
|
end
|
188
211
|
|
189
212
|
# Dispatch the command to Redis and store the result.
|
data/spec/redis_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
-
require 'redis/namespace'
|
3
|
-
require 'logger'
|
4
2
|
|
5
3
|
describe "redis" do
|
6
4
|
before(:all) do
|
@@ -79,6 +77,14 @@ describe "redis" do
|
|
79
77
|
@namespaced.hincrby('bar', 'a_number', 3)
|
80
78
|
@namespaced.hmget('bar', 'a_number').should == ['4']
|
81
79
|
@namespaced.hgetall('bar').should == {'key' => 'value', 'key1' => 'value1', 'a_number' => '4'}
|
80
|
+
|
81
|
+
@namespaced.hsetnx('foonx','nx',10).should be_true
|
82
|
+
@namespaced.hsetnx('foonx','nx',12).should be_false
|
83
|
+
@namespaced.hget('foonx','nx').should == "10"
|
84
|
+
@namespaced.hkeys('foonx').should == %w{ nx }
|
85
|
+
@namespaced.hvals('foonx').should == %w{ 10 }
|
86
|
+
@namespaced.mapped_hmset('baz', {'key' => 'value', 'key1' => 'value1', 'a_number' => 4})
|
87
|
+
@namespaced.hgetall('baz').should == {'key' => 'value', 'key1' => 'value1', 'a_number' => '4'}
|
82
88
|
end
|
83
89
|
|
84
90
|
it "should properly intersect three sets" do
|
@@ -101,6 +107,24 @@ describe "redis" do
|
|
101
107
|
@namespaced.sunion('foo', 'bar').sort.should == %w( 1 2 3 4 )
|
102
108
|
end
|
103
109
|
|
110
|
+
it "should add namespace to sort" do
|
111
|
+
@namespaced.sadd('foo', 1)
|
112
|
+
@namespaced.sadd('foo', 2)
|
113
|
+
@namespaced.set('weight_1', 2)
|
114
|
+
@namespaced.set('weight_2', 1)
|
115
|
+
@namespaced.set('value_1', 'a')
|
116
|
+
@namespaced.set('value_2', 'b')
|
117
|
+
|
118
|
+
@namespaced.sort('foo').should == %w( 1 2 )
|
119
|
+
@namespaced.sort('foo', :limit => [0, 1]).should == %w( 1 )
|
120
|
+
@namespaced.sort('foo', :order => 'desc').should == %w( 2 1 )
|
121
|
+
@namespaced.sort('foo', :by => 'weight_*').should == %w( 2 1 )
|
122
|
+
@namespaced.sort('foo', :get => 'value_*').should == %w( a b )
|
123
|
+
|
124
|
+
@namespaced.sort('foo', :store => 'result')
|
125
|
+
@namespaced.lrange('result', 0, -1).should == %w( 1 2 )
|
126
|
+
end
|
127
|
+
|
104
128
|
it "should yield the correct list of keys" do
|
105
129
|
@namespaced["foo"] = 1
|
106
130
|
@namespaced["bar"] = 2
|
@@ -123,6 +147,10 @@ describe "redis" do
|
|
123
147
|
@namespaced['foo'].should == 'chris'
|
124
148
|
end
|
125
149
|
|
150
|
+
it "should respond to :namespace=" do
|
151
|
+
@namespaced.respond_to?(:namespace=).should == true
|
152
|
+
end
|
153
|
+
|
126
154
|
# Only test aliasing functionality for Redis clients that support aliases.
|
127
155
|
unless Redis::Namespace::ALIASES.empty?
|
128
156
|
it "should support command aliases (delete)" do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,17 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
Bundler.setup(:default, :test)
|
4
|
+
Bundler.require(:default, :test)
|
5
|
+
|
6
|
+
require 'rspec'
|
7
|
+
require 'redis'
|
8
|
+
require 'logger'
|
9
|
+
|
2
10
|
$TESTING=true
|
3
11
|
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
4
|
-
require 'redis'
|
12
|
+
require 'redis/namespace'
|
5
13
|
|
6
|
-
|
14
|
+
RSpec::Matchers.define :have_key do |expected|
|
7
15
|
match do |redis|
|
8
16
|
redis.exists(expected)
|
9
17
|
end
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis-namespace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 15
|
5
|
+
prerelease:
|
5
6
|
segments:
|
7
|
+
- 1
|
6
8
|
- 0
|
7
|
-
|
8
|
-
- 0
|
9
|
-
version: 0.10.0
|
9
|
+
version: "1.0"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Chris Wanstrath
|
@@ -14,16 +14,18 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date:
|
17
|
+
date: 2011-05-16 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: redis
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
24
25
|
requirements:
|
25
26
|
- - <
|
26
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 7
|
27
29
|
segments:
|
28
30
|
- 3
|
29
31
|
- 0
|
@@ -61,23 +63,27 @@ rdoc_options: []
|
|
61
63
|
require_paths:
|
62
64
|
- lib
|
63
65
|
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
64
67
|
requirements:
|
65
68
|
- - ">="
|
66
69
|
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
67
71
|
segments:
|
68
72
|
- 0
|
69
73
|
version: "0"
|
70
74
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
71
76
|
requirements:
|
72
77
|
- - ">="
|
73
78
|
- !ruby/object:Gem::Version
|
79
|
+
hash: 3
|
74
80
|
segments:
|
75
81
|
- 0
|
76
82
|
version: "0"
|
77
83
|
requirements: []
|
78
84
|
|
79
85
|
rubyforge_project:
|
80
|
-
rubygems_version: 1.
|
86
|
+
rubygems_version: 1.5.2
|
81
87
|
signing_key:
|
82
88
|
specification_version: 3
|
83
89
|
summary: Namespaces Redis commands.
|