redis-namespace 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 +27 -0
- data/Rakefile +15 -0
- data/lib/redis/namespace.rb +102 -0
- data/spec/redis_spec.rb +45 -0
- data/spec/spec_helper.rb +4 -0
- metadata +60 -0
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
redis-namespace
|
2
|
+
---------------
|
3
|
+
|
4
|
+
Requires the redis gem.
|
5
|
+
|
6
|
+
Namespaces all Redis calls.
|
7
|
+
|
8
|
+
r = Redis::Namespace.new(:ns, :redis => @r)
|
9
|
+
r['foo'] = 1000
|
10
|
+
|
11
|
+
This will perform the equivalent of:
|
12
|
+
|
13
|
+
redis-cli set ns:foo 1000
|
14
|
+
|
15
|
+
Useful when you have multiple systems using Redis differently in your app.
|
16
|
+
|
17
|
+
|
18
|
+
Installation
|
19
|
+
============
|
20
|
+
|
21
|
+
$ gem install redis-namespace --source=http://gemcutter.org
|
22
|
+
|
23
|
+
|
24
|
+
Author
|
25
|
+
=====
|
26
|
+
|
27
|
+
Chris Wanstrath :: chris@ozmm.org
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
begin
|
2
|
+
require 'jeweler'
|
3
|
+
Jeweler::Tasks.new do |gemspec|
|
4
|
+
gemspec.name = "redis-namespace"
|
5
|
+
gemspec.summary = "Namespaces Redis commands."
|
6
|
+
gemspec.description = "Namespaces Redis commands."
|
7
|
+
gemspec.email = "chris@ozmm.org"
|
8
|
+
gemspec.homepage = "http://github.com/defunkt/redis-namespace"
|
9
|
+
gemspec.authors = ["Chris Wanstrath"]
|
10
|
+
gemspec.version = '0.1.0'
|
11
|
+
end
|
12
|
+
rescue LoadError
|
13
|
+
puts "Jeweler not available. Install it with:"
|
14
|
+
puts "gem install jeweler"
|
15
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'redis'
|
2
|
+
|
3
|
+
class Redis
|
4
|
+
class Namespace
|
5
|
+
# Generated from http://code.google.com/p/redis/wiki/CommandReference
|
6
|
+
# using the following jQuery:
|
7
|
+
#
|
8
|
+
# $('.vt li a').map(function(){ return $(this).text().toLowerCase() }).sort()
|
9
|
+
COMMANDS = [
|
10
|
+
"auth",
|
11
|
+
"bgsave",
|
12
|
+
"dbsize",
|
13
|
+
"decr",
|
14
|
+
"decrby",
|
15
|
+
"del",
|
16
|
+
"exists",
|
17
|
+
"expire",
|
18
|
+
"flushall",
|
19
|
+
"flushdb",
|
20
|
+
"get",
|
21
|
+
"getset",
|
22
|
+
"incr",
|
23
|
+
"incrby",
|
24
|
+
"info",
|
25
|
+
"keys",
|
26
|
+
"lastsave",
|
27
|
+
"lindex",
|
28
|
+
"llen",
|
29
|
+
"lpop",
|
30
|
+
"lpush",
|
31
|
+
"lrange",
|
32
|
+
"lrem",
|
33
|
+
"lset",
|
34
|
+
"ltrim",
|
35
|
+
"mget",
|
36
|
+
"monitor",
|
37
|
+
"move",
|
38
|
+
"quit",
|
39
|
+
"randomkey",
|
40
|
+
"rename",
|
41
|
+
"renamenx",
|
42
|
+
"rpop",
|
43
|
+
"rpush",
|
44
|
+
"sadd",
|
45
|
+
"save",
|
46
|
+
"scard",
|
47
|
+
"sdiff",
|
48
|
+
"sdiffstore",
|
49
|
+
"select",
|
50
|
+
"set",
|
51
|
+
"setnx",
|
52
|
+
"shutdown",
|
53
|
+
"sinter",
|
54
|
+
"sinterstore",
|
55
|
+
"sismember",
|
56
|
+
"slaveof",
|
57
|
+
"smembers",
|
58
|
+
"smove",
|
59
|
+
"sort",
|
60
|
+
"srem",
|
61
|
+
"sunion",
|
62
|
+
"sunionstore",
|
63
|
+
"ttl",
|
64
|
+
"type",
|
65
|
+
"[]",
|
66
|
+
"[]="
|
67
|
+
]
|
68
|
+
|
69
|
+
def initialize(namespace, options = {})
|
70
|
+
@namespace = namespace
|
71
|
+
@redis = options[:redis]
|
72
|
+
end
|
73
|
+
|
74
|
+
# Ruby defines a now deprecated type method so we need to override it here
|
75
|
+
# since it will never hit method_missing
|
76
|
+
def type(key)
|
77
|
+
call_command(['type', key])
|
78
|
+
end
|
79
|
+
|
80
|
+
def mapped_mget(*keys)
|
81
|
+
result = {}
|
82
|
+
mget(*keys).each do |value|
|
83
|
+
key = keys.shift
|
84
|
+
result.merge!(key => value) unless value.nil?
|
85
|
+
end
|
86
|
+
result
|
87
|
+
end
|
88
|
+
|
89
|
+
def mget(*keys)
|
90
|
+
keys = keys.map { |key| "#{@namespace}:#{key}"} if @namespace
|
91
|
+
call_command([:mget] + keys)
|
92
|
+
end
|
93
|
+
|
94
|
+
def method_missing(command, *args, &block)
|
95
|
+
if COMMANDS.include?(command.to_s) && args[0]
|
96
|
+
args[0] = "#{@namespace}:#{args[0]}"
|
97
|
+
end
|
98
|
+
|
99
|
+
@redis.send(command, *args, &block)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/spec/redis_spec.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
require 'redis/namespace'
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
describe "redis" do
|
6
|
+
before(:all) do
|
7
|
+
# use database 15 for testing so we dont accidentally step on you real data
|
8
|
+
@r = Redis.new :db => 15
|
9
|
+
end
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
@r['foo'] = 'bar'
|
13
|
+
end
|
14
|
+
|
15
|
+
after(:each) do
|
16
|
+
@r.flushdb
|
17
|
+
end
|
18
|
+
|
19
|
+
after(:all) do
|
20
|
+
@r.quit
|
21
|
+
end
|
22
|
+
it "should be able to use a namespace" do
|
23
|
+
r = Redis::Namespace.new(:ns, :redis => @r)
|
24
|
+
r.flushdb
|
25
|
+
|
26
|
+
r['foo'].should == nil
|
27
|
+
r['foo'] = 'chris'
|
28
|
+
r['foo'].should == 'chris'
|
29
|
+
@r['foo'] = 'bob'
|
30
|
+
@r['foo'].should == 'bob'
|
31
|
+
|
32
|
+
r.incr('counter', 2)
|
33
|
+
r['counter'].to_i.should == 2
|
34
|
+
@r['counter'].should == nil
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be able to use a namespace with mget" do
|
38
|
+
r = Redis::Namespace.new(:ns, :redis => @r)
|
39
|
+
|
40
|
+
r['foo'] = 1000
|
41
|
+
r['bar'] = 2000
|
42
|
+
r.mapped_mget('foo', 'bar').should == { 'foo' => '1000', 'bar' => '2000' }
|
43
|
+
r.mapped_mget('foo', 'baz', 'bar').should == { 'foo' => '1000', 'bar' => '2000' }
|
44
|
+
end
|
45
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: redis-namespace
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chris Wanstrath
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-10-13 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Namespaces Redis commands.
|
17
|
+
email: chris@ozmm.org
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.md
|
24
|
+
files:
|
25
|
+
- README.md
|
26
|
+
- Rakefile
|
27
|
+
- lib/redis/namespace.rb
|
28
|
+
- spec/redis_spec.rb
|
29
|
+
- spec/spec_helper.rb
|
30
|
+
has_rdoc: true
|
31
|
+
homepage: http://github.com/defunkt/redis-namespace
|
32
|
+
licenses: []
|
33
|
+
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options:
|
36
|
+
- --charset=UTF-8
|
37
|
+
require_paths:
|
38
|
+
- lib
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0"
|
44
|
+
version:
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
requirements: []
|
52
|
+
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 1.3.5
|
55
|
+
signing_key:
|
56
|
+
specification_version: 3
|
57
|
+
summary: Namespaces Redis commands.
|
58
|
+
test_files:
|
59
|
+
- spec/redis_spec.rb
|
60
|
+
- spec/spec_helper.rb
|