redis-store 1.0.0.1 → 1.1.0.rc
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-store might be problematic. Click here for more details.
- data/Gemfile +2 -34
- data/README.md +17 -220
- data/Rakefile +7 -54
- data/lib/redis-store.rb +11 -44
- data/lib/redis/distributed_store.rb +8 -1
- data/lib/redis/factory.rb +17 -21
- data/lib/redis/store.rb +3 -8
- data/lib/redis/store/interface.rb +4 -0
- data/lib/redis/store/marshalling.rb +4 -0
- data/lib/redis/store/version.rb +1 -8
- data/lib/tasks/redis.tasks.rb +167 -0
- data/redis-store.gemspec +22 -97
- data/{spec → test}/config/node-one.conf +2 -2
- data/{spec → test}/config/node-two.conf +2 -2
- data/{spec → test}/config/redis.conf +3 -2
- data/{spec/redis/distributed_store_spec.rb → test/redis/distributed_store_test.rb} +13 -15
- data/test/redis/factory_test.rb +98 -0
- data/test/redis/store/interface_test.rb +27 -0
- data/test/redis/store/marshalling_test.rb +127 -0
- data/test/redis/store/namespace_test.rb +86 -0
- data/test/redis/store/version_test.rb +7 -0
- data/test/redis/store_test.rb +17 -0
- data/test/test_helper.rb +22 -0
- metadata +85 -97
- data/.travis.yml +0 -7
- data/CHANGELOG +0 -311
- data/VERSION +0 -1
- data/lib/action_controller/session/redis_session_store.rb +0 -81
- data/lib/active_support/cache/redis_store.rb +0 -254
- data/lib/cache/merb/redis_store.rb +0 -79
- data/lib/cache/sinatra/redis_store.rb +0 -131
- data/lib/i18n/backend/redis.rb +0 -67
- data/lib/rack/cache/redis_entitystore.rb +0 -48
- data/lib/rack/cache/redis_metastore.rb +0 -40
- data/lib/rack/session/merb.rb +0 -32
- data/lib/rack/session/redis.rb +0 -88
- data/spec/action_controller/session/redis_session_store_spec.rb +0 -126
- data/spec/active_support/cache/redis_store_spec.rb +0 -426
- data/spec/cache/merb/redis_store_spec.rb +0 -143
- data/spec/cache/sinatra/redis_store_spec.rb +0 -192
- data/spec/i18n/backend/redis_spec.rb +0 -72
- data/spec/rack/cache/entitystore/pony.jpg +0 -0
- data/spec/rack/cache/entitystore/redis_spec.rb +0 -124
- data/spec/rack/cache/metastore/redis_spec.rb +0 -259
- data/spec/rack/session/redis_spec.rb +0 -234
- data/spec/redis/factory_spec.rb +0 -110
- data/spec/redis/store/interface_spec.rb +0 -23
- data/spec/redis/store/marshalling_spec.rb +0 -119
- data/spec/redis/store/namespace_spec.rb +0 -76
- data/spec/redis/store/version_spec.rb +0 -7
- data/spec/redis/store_spec.rb +0 -13
- data/spec/spec_helper.rb +0 -43
- data/tasks/redis.tasks.rb +0 -235
data/Gemfile
CHANGED
@@ -1,34 +1,2 @@
|
|
1
|
-
source
|
2
|
-
|
3
|
-
|
4
|
-
group :development do
|
5
|
-
gem "jeweler"
|
6
|
-
gem "git"
|
7
|
-
end
|
8
|
-
|
9
|
-
group :development, :test, :rails3 do
|
10
|
-
gem "rack-cache"
|
11
|
-
gem "merb", "1.1.0"
|
12
|
-
gem "rspec", "1.3.0"
|
13
|
-
gem "i18n"
|
14
|
-
|
15
|
-
if RUBY_VERSION > '1.9'
|
16
|
-
gem "methopara" # required by merb.
|
17
|
-
else
|
18
|
-
gem "ruby-debug" # linecache isn't compatible with 1.9.2 yet.
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
if ENV["REDIS_STORE_ENV"] == "rails3"
|
23
|
-
group :rails3 do
|
24
|
-
gem "rack", "~> 1.2.1"
|
25
|
-
gem "activesupport", "3.0.5"
|
26
|
-
gem "actionpack", "3.0.5"
|
27
|
-
end
|
28
|
-
else
|
29
|
-
group :test do
|
30
|
-
gem "rack", "~> 1.1.0"
|
31
|
-
gem "activesupport", "2.3.11"
|
32
|
-
gem "actionpack", "2.3.11"
|
33
|
-
end
|
34
|
-
end
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
gemspec
|
data/README.md
CHANGED
@@ -1,238 +1,35 @@
|
|
1
|
-
#
|
1
|
+
# Redis stores for Ruby frameworks
|
2
2
|
|
3
|
-
|
3
|
+
__Redis Store__ provides a full set of stores (*Cache*, *I18n*, *Session*, *HTTP Cache*) for all the modern Ruby frameworks like: __Ruby on Rails__, __Sinatra__, __Rack__, __Rack::Cache__ and __I18n__. It natively supports object marshalling, timeouts, single or multiple nodes and namespaces.
|
4
4
|
|
5
|
-
|
5
|
+
This is the core for all the other gems, please check the *READMEs* to be informed about the usage.
|
6
|
+
|
7
|
+
## Redis Installation
|
8
|
+
|
9
|
+
### Option 1: Homebrew
|
6
10
|
|
7
11
|
MacOS X users should use [Homebrew](https://github.com/mxcl/homebrew) to install Redis:
|
8
12
|
|
9
13
|
brew install redis
|
10
14
|
|
11
|
-
###
|
15
|
+
### Option 2: From Source
|
12
16
|
|
13
|
-
Download and install Redis from [http://
|
17
|
+
Download and install Redis from [http://redis.io](http://redis.io/)
|
14
18
|
|
15
|
-
|
16
|
-
tar -zxf redis-2.
|
17
|
-
mv redis-2.
|
19
|
+
wget http://redis.googlecode.com/files/redis-2.4.5.tar.gz
|
20
|
+
tar -zxf redis-2.4.5.tar.gz
|
21
|
+
mv redis-2.4.5 redis
|
18
22
|
cd redis
|
19
23
|
make
|
20
24
|
|
21
|
-
|
22
|
-
|
23
|
-
Assuming you're using RVM or on Windows, install the gem with:
|
24
|
-
|
25
|
-
gem install redis-store
|
26
|
-
|
27
|
-
## Options
|
28
|
-
You can specify the Redis configuration details using a URI or a hash. By default the gem will attempt to connect to `localhost` port `6379` and the db `0`.
|
29
|
-
|
30
|
-
### Set by URI
|
31
|
-
|
32
|
-
For example
|
33
|
-
|
34
|
-
"redis://:secret@192.168.1.100:23682/13/theplaylist"
|
35
|
-
|
36
|
-
Made up of the following:
|
37
|
-
|
38
|
-
host: 192.168.1.100
|
39
|
-
port: 23682
|
40
|
-
db: 13
|
41
|
-
namespace: theplaylist
|
42
|
-
password: secret
|
43
|
-
|
44
|
-
If you want to specify the `namespace` option, you have to pass the `db` param too.
|
45
|
-
#### __Important__: `namespace` is only supported for single, non-distributed stores.
|
46
|
-
|
47
|
-
### Set by Hash
|
48
|
-
|
49
|
-
{ :host => 192.168.1.100, :port => 23682, :db => 13, :namespace => "theplaylist", :password => "secret" }
|
50
|
-
|
51
|
-
#### __Important__: `namespace` is only supported for single, non-distributed stores.
|
52
|
-
|
53
|
-
## Cache store
|
54
|
-
|
55
|
-
Provides a cache store for your Ruby web framework of choice.
|
56
|
-
|
57
|
-
### Rails 2.x
|
58
|
-
|
59
|
-
config.gem "redis-store"
|
60
|
-
config.cache_store = :redis_store
|
61
|
-
|
62
|
-
### Rails 2.x (with Bundler)
|
63
|
-
|
64
|
-
# Gemfile
|
65
|
-
gem "redis-store"
|
66
|
-
|
67
|
-
# in your configuration
|
68
|
-
config.gem "redis-store"
|
69
|
-
config.cache_store = :redis_store, { ... optional configuration ... }
|
70
|
-
|
71
|
-
### Rails 3.x
|
72
|
-
|
73
|
-
# Gemfile
|
74
|
-
gem 'redis'
|
75
|
-
gem 'redis-store', '1.0.0.1'
|
76
|
-
|
77
|
-
# config/environments/production.rb
|
78
|
-
config.cache_store = :redis_store, { ... optional configuration ... }
|
79
|
-
|
80
|
-
For advanced configurations scenarios please visit [the wiki](https://github.com/jodosha/redis-store/wiki/Frameworks-Configuration).
|
81
|
-
|
82
|
-
### Merb
|
83
|
-
|
84
|
-
dependency "redis-store", "1.0.0.1"
|
85
|
-
dependency("merb-cache", merb_gems_version) do
|
86
|
-
Merb::Cache.setup do
|
87
|
-
register(:redis, Merb::Cache::RedisStore, :servers => ["127.0.0.1:6379"])
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
### Sinatra
|
92
|
-
|
93
|
-
require "sinatra"
|
94
|
-
require "redis-store"
|
95
|
-
class MyApp < Sinatra::Base
|
96
|
-
register Sinatra::Cache
|
97
|
-
get "/hi" do
|
98
|
-
settings.cache.fetch("greet") { "Hello, World!" }
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
Keep in mind that the above fetch will return "OK" on success, not the return of the block.
|
103
|
-
|
104
|
-
For advanced configurations scenarios please visit [the wiki](https://github.com/jodosha/redis-store/wiki/Frameworks-Configuration).
|
105
|
-
|
106
|
-
## Rack::Session
|
107
|
-
|
108
|
-
Provides a Redis store for Rack::Session. See [http://rack.rubyforge.org/doc/Rack/Session.html](http://rack.rubyforge.org/doc/Rack/Session.html)
|
109
|
-
|
110
|
-
### Rack application
|
111
|
-
|
112
|
-
require "rack"
|
113
|
-
require "redis-store"
|
114
|
-
require "application"
|
115
|
-
use Rack::Session::Redis
|
116
|
-
run Application.new
|
117
|
-
|
118
|
-
### Rails 2.x
|
119
|
-
|
120
|
-
# config/environment.rb
|
121
|
-
config.gem "redis-store"
|
122
|
-
|
123
|
-
# then configure as following:
|
124
|
-
|
125
|
-
# config/environments/*.rb
|
126
|
-
config.cache_store = :redis_store
|
127
|
-
|
128
|
-
# or
|
129
|
-
|
130
|
-
# config/initializers/session_store.rb
|
131
|
-
ActionController::Base.session = {
|
132
|
-
:key => APPLICATION['session_key'],
|
133
|
-
:secret => APPLICATION['session_secret'],
|
134
|
-
:key_prefix => Rails.env
|
135
|
-
}
|
136
|
-
|
137
|
-
ActionController::Base.session_store = :redis_session_store
|
138
|
-
|
139
|
-
### Rails 2.x (with Bundler)
|
140
|
-
|
141
|
-
# Gemfile
|
142
|
-
gem "redis-store"
|
143
|
-
|
144
|
-
# then configure as following:
|
145
|
-
|
146
|
-
# config/environments/*.rb
|
147
|
-
config.cache_store = :redis_store
|
148
|
-
|
149
|
-
# or
|
150
|
-
|
151
|
-
# config/initializers/session_store.rb
|
152
|
-
ActionController::Base.session = {
|
153
|
-
:key => APPLICATION['session_key'],
|
154
|
-
:secret => APPLICATION['session_secret'],
|
155
|
-
:key_prefix => Rails.env
|
156
|
-
}
|
157
|
-
|
158
|
-
ActionController::Base.session_store = :redis_session_store
|
159
|
-
|
160
|
-
### Rails 3.x
|
161
|
-
|
162
|
-
# Gemfile
|
163
|
-
gem 'rails', '3.0.3'
|
164
|
-
gem 'redis'
|
165
|
-
gem 'redis-store', '1.0.0.1'
|
166
|
-
|
167
|
-
# config/initializers/session_store.rb
|
168
|
-
MyApp::Application.config.session_store :redis_session_store
|
169
|
-
|
170
|
-
For advanced configurations scenarios please visit [the wiki](https://github.com/jodosha/redis-store/wiki/Frameworks-Configuration).
|
171
|
-
|
172
|
-
### Merb
|
173
|
-
|
174
|
-
dependency "redis-store", "1.0.0.1"
|
175
|
-
Merb::Config.use do |c|
|
176
|
-
c[:session_store] = "redis"
|
177
|
-
end
|
178
|
-
Merb::BootLoader.before_app_loads do
|
179
|
-
Merb::SessionContainer.subclasses << "Merb::RedisSession"
|
180
|
-
end
|
181
|
-
|
182
|
-
### Sinatra
|
183
|
-
|
184
|
-
require "sinatra"
|
185
|
-
require "redis-store"
|
186
|
-
|
187
|
-
class MyApp < Sinatra::Base
|
188
|
-
use Rack::Session::Redis, :redis_server => 'redis://127.0.0.1:6379/0' # Redis server on localhost port 6379, database 0
|
189
|
-
|
190
|
-
get "/" do
|
191
|
-
session[:visited_at] = DateTime.now.to_s # This is stored in Redis
|
192
|
-
"Hello, visitor."
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
For advanced configurations scenarios please visit [the wiki](https://github.com/jodosha/redis-store/wiki/Frameworks-Configuration).
|
197
|
-
|
198
|
-
## Rack::Cache
|
199
|
-
|
200
|
-
Provides a Redis store for HTTP caching. See [http://github.com/rtomayko/rack-cache](http://github.com/rtomayko/rack-cache)
|
201
|
-
|
202
|
-
require "rack"
|
203
|
-
require "rack/cache"
|
204
|
-
require "redis-store"
|
205
|
-
require "application"
|
206
|
-
use Rack::Cache,
|
207
|
-
:metastore => 'redis://localhost:6379/0/metastore',
|
208
|
-
:entitystore => 'redis://localhost:6380/0/entitystore'
|
209
|
-
run Application.new
|
210
|
-
|
211
|
-
## I18n
|
212
|
-
|
213
|
-
require "i18n"
|
214
|
-
require "redis-store"
|
215
|
-
I18n.backend = I18n::Backend::Redis.new
|
216
|
-
|
217
|
-
The backend accepts the uri string and hash options.
|
218
|
-
|
219
|
-
## Unicorn
|
220
|
-
|
221
|
-
Use `Rails.cache.reconnect` in your Unicorn hooks, in order to force the client reconnection.
|
222
|
-
|
223
|
-
## Running specs
|
25
|
+
## Running tests
|
224
26
|
|
225
|
-
gem install jeweler bundler
|
226
27
|
git clone git://github.com/jodosha/redis-store.git
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
rake dtach:install
|
231
|
-
rake redis:install
|
232
|
-
rake
|
233
|
-
REDIS_STORE_ENV=rails3 rake # to test against Rails 3
|
28
|
+
cd redis-store/redis-store
|
29
|
+
gem install bundler --pre # required version: 1.1.rc
|
30
|
+
ruby ci/run.rb
|
234
31
|
|
235
|
-
If you are on **Snow Leopard** you have to run `env ARCHFLAGS="-arch x86_64"
|
32
|
+
If you are on **Snow Leopard** you have to run `env ARCHFLAGS="-arch x86_64" ruby ci/run.rb`
|
236
33
|
|
237
34
|
## Copyright
|
238
35
|
|
data/Rakefile
CHANGED
@@ -1,60 +1,13 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'bundler'
|
2
|
+
Bundler.setup
|
3
3
|
require 'rake'
|
4
|
-
require '
|
5
|
-
require 'rake/rdoctask'
|
6
|
-
require 'spec/rake/spectask'
|
7
|
-
|
8
|
-
task :default => "spec:suite"
|
4
|
+
require 'bundler/gem_tasks'
|
9
5
|
|
10
6
|
begin
|
11
|
-
require
|
12
|
-
Jeweler::Tasks.new do |gemspec|
|
13
|
-
gemspec.name = "#{ENV["GEM_PREFIX"]}redis-store"
|
14
|
-
gemspec.summary = "Namespaced Rack::Session, Rack::Cache, I18n and cache Redis stores for Ruby web frameworks."
|
15
|
-
gemspec.description = "Namespaced Rack::Session, Rack::Cache, I18n and cache Redis stores for Ruby web frameworks."
|
16
|
-
gemspec.email = "guidi.luca@gmail.com"
|
17
|
-
gemspec.homepage = "http://github.com/jodosha/redis-store"
|
18
|
-
gemspec.authors = [ "Luca Guidi" ]
|
19
|
-
gemspec.executables = [ ]
|
20
|
-
gemspec.add_dependency "redis", ">= 2.0.0"
|
21
|
-
end
|
22
|
-
|
23
|
-
Jeweler::GemcutterTasks.new
|
7
|
+
require 'rdoc/task'
|
24
8
|
rescue LoadError
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
namespace :spec do
|
29
|
-
desc "Run all the examples by starting a detached Redis instance"
|
30
|
-
task :suite => :prepare do
|
31
|
-
invoke_with_redis_replication "spec:run"
|
32
|
-
end
|
33
|
-
|
34
|
-
Spec::Rake::SpecTask.new(:run) do |t|
|
35
|
-
t.spec_files = FileList['spec/**/*_spec.rb']
|
36
|
-
t.spec_opts = %w(-fs --color)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
desc "Run all examples with RCov"
|
41
|
-
task :rcov => :prepare do
|
42
|
-
invoke_with_redis_replication "rcov_run"
|
43
|
-
end
|
44
|
-
|
45
|
-
Spec::Rake::SpecTask.new(:rcov_run) do |t|
|
46
|
-
t.spec_files = FileList['spec/**/*_spec.rb']
|
47
|
-
t.rcov = true
|
48
|
-
end
|
49
|
-
|
50
|
-
task :prepare do
|
51
|
-
`mkdir -p tmp && rm tmp/*.rdb`
|
52
|
-
end
|
53
|
-
|
54
|
-
namespace :bundle do
|
55
|
-
task :clean do
|
56
|
-
system "rm -rf ~/.bundle/ ~/.gem/ .bundle/ Gemfile.lock"
|
57
|
-
end
|
9
|
+
require 'rake/rdoctask'
|
58
10
|
end
|
59
11
|
|
60
|
-
load
|
12
|
+
load 'tasks/redis.tasks.rb'
|
13
|
+
task :default => 'redis:test:suite'
|
data/lib/redis-store.rb
CHANGED
@@ -1,45 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
# Cache store
|
13
|
-
if defined?(Sinatra)
|
14
|
-
require "cache/sinatra/redis_store"
|
15
|
-
elsif defined?(Merb)
|
16
|
-
# HACK for cyclic dependency: redis-store is required before merb-cache
|
17
|
-
module Merb; module Cache; class AbstractStore; end end end
|
18
|
-
require "cache/merb/redis_store"
|
19
|
-
elsif defined?(ActiveSupport)
|
20
|
-
require "active_support/cache/redis_store"
|
21
|
-
end
|
22
|
-
|
23
|
-
# Rack::Session
|
24
|
-
if defined?(Rack::Session)
|
25
|
-
require "rack/session/abstract/id"
|
26
|
-
require "rack/session/redis"
|
27
|
-
if defined?(Merb)
|
28
|
-
require "rack/session/merb"
|
1
|
+
require 'redis'
|
2
|
+
require 'redis/store'
|
3
|
+
require 'redis/factory'
|
4
|
+
require 'redis/distributed_store'
|
5
|
+
require 'redis/store/namespace'
|
6
|
+
require 'redis/store/marshalling'
|
7
|
+
require 'redis/store/version'
|
8
|
+
|
9
|
+
class Redis
|
10
|
+
class Store < self
|
29
11
|
end
|
30
|
-
end
|
31
|
-
|
32
|
-
if defined?(Rails)
|
33
|
-
require "action_controller/session/redis_session_store"
|
34
|
-
end
|
35
|
-
|
36
|
-
# Rack::Cache
|
37
|
-
if defined?(Rack::Cache)
|
38
|
-
require "rack/cache/key"
|
39
|
-
require "rack/cache/redis_metastore"
|
40
|
-
require "rack/cache/redis_entitystore"
|
41
|
-
end
|
42
|
-
|
43
|
-
if defined?(I18n)
|
44
|
-
require "i18n/backend/redis"
|
45
|
-
end
|
12
|
+
end
|
@@ -1,10 +1,13 @@
|
|
1
|
+
require 'redis/distributed'
|
2
|
+
|
1
3
|
class Redis
|
2
4
|
class DistributedStore < Distributed
|
5
|
+
@@timeout = 5
|
3
6
|
attr_reader :ring
|
4
7
|
|
5
8
|
def initialize(addresses, options = { })
|
6
9
|
nodes = addresses.map do |address|
|
7
|
-
::Redis::Store.new address
|
10
|
+
::Redis::Store.new _merge_options(address, options)
|
8
11
|
end
|
9
12
|
_extend_namespace options
|
10
13
|
@ring = Redis::HashRing.new nodes
|
@@ -35,5 +38,9 @@ class Redis
|
|
35
38
|
@namespace = options[:namespace]
|
36
39
|
extend ::Redis::Store::Namespace if @namespace
|
37
40
|
end
|
41
|
+
|
42
|
+
def _merge_options(address, options)
|
43
|
+
address.merge(:timeout => options[:timeout] || @@timeout)
|
44
|
+
end
|
38
45
|
end
|
39
46
|
end
|
data/lib/redis/factory.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
1
3
|
class Redis
|
2
4
|
class Factory
|
3
5
|
def self.create(*redis_client_options)
|
4
6
|
redis_client_options = redis_client_options.flatten.compact.inject([]) do |result, address|
|
5
|
-
result <<
|
7
|
+
result << resolve(address)
|
6
8
|
result
|
7
9
|
end
|
8
10
|
if redis_client_options.size > 1
|
@@ -12,32 +14,26 @@ class Redis
|
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
|
-
def self.
|
16
|
-
if
|
17
|
-
options =
|
17
|
+
def self.resolve(uri) #:api: private
|
18
|
+
if uri.is_a?(Hash)
|
19
|
+
options = uri.dup
|
18
20
|
options[:namespace] ||= options.delete(:key_prefix) # RailsSessionStore
|
19
21
|
options
|
20
22
|
else
|
21
|
-
|
22
|
-
|
23
|
-
uri
|
24
|
-
_, db, namespace = if uri.path
|
25
|
-
uri.path.split /\//
|
26
|
-
end
|
27
|
-
else
|
28
|
-
warn "[DEPRECATION] `#{address_or_options}` is deprecated. Please use `redis://#{address_or_options}` instead."
|
29
|
-
address_or_options, password = address_or_options.split(/\@/).reverse
|
30
|
-
password = password.gsub(/\:/, "") if password
|
31
|
-
host, port = address_or_options.split /\:/
|
32
|
-
port, db, namespace = port.split /\// if port
|
23
|
+
uri = URI.parse(uri)
|
24
|
+
_, db, namespace = if uri.path
|
25
|
+
uri.path.split /\//
|
33
26
|
end
|
34
27
|
|
35
|
-
options = {
|
36
|
-
|
37
|
-
|
38
|
-
|
28
|
+
options = {
|
29
|
+
:host => uri.host,
|
30
|
+
:port => uri.port,
|
31
|
+
:password => uri.password
|
32
|
+
}
|
33
|
+
|
34
|
+
options[:db] = db.to_i if db
|
39
35
|
options[:namespace] = namespace if namespace
|
40
|
-
|
36
|
+
|
41
37
|
options
|
42
38
|
end
|
43
39
|
end
|