redis-session-store 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -18
- data/lib/redis-session-store.rb +30 -12
- data/redis-session-store.gemspec +3 -4
- data/spec/fake_action_dispatch_session_abstract_store.rb +18 -10
- data/spec/redis_session_store_spec.rb +22 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8c01a4bd8ba08bf7a390925f4dc40f8b9c008d6
|
4
|
+
data.tar.gz: 91efb335e55ba86ee01476a74ab4ed0217b48e85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cfb8578cfa2a62b70bf4f79ea3574e26c82b5e439d9df7ea3097f6d4bea98543e10590daf2ecc484922feb5868a409af47d5126a768c4f67ba392771837f144f
|
7
|
+
data.tar.gz: 1b369cf1663b3ba9a581fc0557541b53546762726086ffa0a799d8fd582a45b4c0b73cfd7ee92f50ec74a90f104155422170ab83007c7f15103daf1a8a712dda
|
data/.rubocop.yml
CHANGED
@@ -1,18 +1 @@
|
|
1
|
-
|
2
|
-
# on 2014-02-07 09:24:00 -0500 using RuboCop version 0.18.0.
|
3
|
-
# The point is for the user to remove these configuration records
|
4
|
-
# one by one as the offences are removed from the code base.
|
5
|
-
# Note that changes in the inspected code, or installation of new
|
6
|
-
# versions of RuboCop, may require this file to be generated again.
|
7
|
-
|
8
|
-
Documentation:
|
9
|
-
Enabled: false
|
10
|
-
|
11
|
-
# Offence count: 6
|
12
|
-
LineLength:
|
13
|
-
Max: 124
|
14
|
-
|
15
|
-
# Offence count: 2
|
16
|
-
# Configuration parameters: CountComments.
|
17
|
-
MethodLength:
|
18
|
-
Max: 12
|
1
|
+
---
|
data/lib/redis-session-store.rb
CHANGED
@@ -3,19 +3,31 @@ require 'redis'
|
|
3
3
|
|
4
4
|
# Redis session storage for Rails, and for Rails only. Derived from
|
5
5
|
# the MemCacheStore code, simply dropping in Redis instead.
|
6
|
-
#
|
7
|
-
# Options:
|
8
|
-
# :key => Same as with the other cookie stores, key name
|
9
|
-
# :redis => {
|
10
|
-
# :host => Redis host name, default is localhost
|
11
|
-
# :port => Redis port, default is 6379
|
12
|
-
# :db => Database number, defaults to 0. Useful to separate your session storage from other data
|
13
|
-
# :key_prefix => Prefix for keys used in Redis, e.g. myapp-. Useful to separate session storage keys visibly from others
|
14
|
-
# :expire_after => A number in seconds to set the timeout interval for the session. Will map directly to expiry in Redis
|
15
|
-
# }
|
16
6
|
class RedisSessionStore < ActionDispatch::Session::AbstractStore
|
17
|
-
VERSION = '0.3.
|
7
|
+
VERSION = '0.3.1'
|
18
8
|
|
9
|
+
# ==== Options
|
10
|
+
# * +:key+ - Same as with the other cookie stores, key name
|
11
|
+
# * +:redis+ - A hash with redis-specific options
|
12
|
+
# * +:host+ - Redis host name, default is localhost
|
13
|
+
# * +:port+ - Redis port, default is 6379
|
14
|
+
# * +:db+ - Database number, defaults to 0.
|
15
|
+
# * +:key_prefix+ - Prefix for keys used in Redis, e.g. +myapp:+
|
16
|
+
# * +:expire_after+ - A number in seconds for session timeout
|
17
|
+
#
|
18
|
+
# ==== Examples
|
19
|
+
#
|
20
|
+
# My::Application.config.session_store = :redis_session_store, {
|
21
|
+
# :key => 'your_session_key',
|
22
|
+
# :redis => {
|
23
|
+
# :db => 2,
|
24
|
+
# :expire_after => 120.minutes,
|
25
|
+
# :key_prefix => "myapp:session:",
|
26
|
+
# :host => 'host', # Redis host name, default is localhost
|
27
|
+
# :port => 12345 # Redis port, default is 6379
|
28
|
+
# }
|
29
|
+
# }
|
30
|
+
#
|
19
31
|
def initialize(app, options = {})
|
20
32
|
super
|
21
33
|
|
@@ -57,13 +69,19 @@ class RedisSessionStore < ActionDispatch::Session::AbstractStore
|
|
57
69
|
return false
|
58
70
|
end
|
59
71
|
|
72
|
+
def destroy_session(env, sid, options)
|
73
|
+
redis.del(prefixed(sid))
|
74
|
+
generate_sid
|
75
|
+
end
|
76
|
+
|
60
77
|
def destroy(env)
|
61
78
|
if env['rack.request.cookie_hash'] && env['rack.request.cookie_hash'][key]
|
62
79
|
redis.del(prefixed(env['rack.request.cookie_hash'][key]))
|
63
80
|
end
|
64
81
|
rescue Errno::ECONNREFUSED
|
65
82
|
if defined?(Rails)
|
66
|
-
Rails.logger.warn('RedisSessionStore#destroy:
|
83
|
+
Rails.logger.warn('RedisSessionStore#destroy: ' <<
|
84
|
+
'Connection to redis refused')
|
67
85
|
else
|
68
86
|
warn('RedisSessionStore#destroy: Connection to redis refused')
|
69
87
|
end
|
data/redis-session-store.gemspec
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
# vim:fileencoding=utf-8
|
2
|
-
require 'English'
|
3
2
|
|
4
3
|
Gem::Specification.new do |gem|
|
5
4
|
gem.name = 'redis-session-store'
|
6
5
|
gem.authors = ['Mathias Meyer']
|
7
6
|
gem.email = ['meyer@paperplanes.de']
|
8
7
|
gem.summary = 'A drop-in replacement for e.g. MemCacheStore to ' <<
|
9
|
-
|
8
|
+
'store Rails sessions (and Rails sessions only) in Redis.'
|
10
9
|
gem.description = gem.summary
|
11
10
|
gem.homepage = 'https://github.com/roidrage/redis-session-store'
|
12
11
|
gem.license = 'MIT'
|
@@ -14,8 +13,8 @@ Gem::Specification.new do |gem|
|
|
14
13
|
gem.has_rdoc = true
|
15
14
|
gem.extra_rdoc_files = %w(LICENSE AUTHORS.md CONTRIBUTING.md)
|
16
15
|
|
17
|
-
gem.files = `git ls-files`.split(
|
18
|
-
gem.require_paths =
|
16
|
+
gem.files = `git ls-files -z`.split("\x0")
|
17
|
+
gem.require_paths = %w(lib)
|
19
18
|
gem.version = File.read('lib/redis-session-store.rb')
|
20
19
|
.match(/^ VERSION = '(.*)'/)[1]
|
21
20
|
|
@@ -1,23 +1,31 @@
|
|
1
1
|
# vim:fileencoding=utf-8
|
2
2
|
|
3
3
|
unless defined?(ActionDispatch::Session::AbstractStore)
|
4
|
-
module ActionDispatch
|
4
|
+
module ActionDispatch # rubocop:disable Documentation
|
5
5
|
module Session
|
6
6
|
class AbstractStore
|
7
|
+
DEFAULT_OPTIONS = {
|
8
|
+
key: '_session_id',
|
9
|
+
path: '/',
|
10
|
+
domain: nil,
|
11
|
+
expire_after: nil,
|
12
|
+
secure: false,
|
13
|
+
httponly: true,
|
14
|
+
cookie_only: true
|
15
|
+
}.freeze
|
16
|
+
|
7
17
|
def initialize(app, options = {})
|
8
18
|
@app = app
|
9
|
-
@default_options =
|
10
|
-
key: '_session_id',
|
11
|
-
path: '/',
|
12
|
-
domain: nil,
|
13
|
-
expire_after: nil,
|
14
|
-
secure: false,
|
15
|
-
httponly: true,
|
16
|
-
cookie_only: true
|
17
|
-
}.merge(options)
|
19
|
+
@default_options = DEFAULT_OPTIONS.dup.merge(options)
|
18
20
|
@key = @default_options[:key]
|
19
21
|
@cookie_only = @default_options[:cookie_only]
|
20
22
|
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def generate_sid
|
27
|
+
rand(999..9999).to_s(16)
|
28
|
+
end
|
21
29
|
end
|
22
30
|
end
|
23
31
|
end
|
@@ -98,8 +98,9 @@ describe RedisSessionStore do
|
|
98
98
|
end
|
99
99
|
|
100
100
|
describe 'rack 1.45 compatibility' do
|
101
|
-
# Rack 1.45 (which Rails 3.2.x depends on) uses the return value of
|
102
|
-
#
|
101
|
+
# Rack 1.45 (which Rails 3.2.x depends on) uses the return value of
|
102
|
+
# set_session to set the cookie value. See:
|
103
|
+
# https://github.com/rack/rack/blob/1.4.5/lib/rack/session/abstract/id.rb
|
103
104
|
|
104
105
|
let(:env) { double('env') }
|
105
106
|
let(:session_id) { 12_345 }
|
@@ -109,7 +110,8 @@ describe RedisSessionStore do
|
|
109
110
|
context 'when successfully persisting the session' do
|
110
111
|
|
111
112
|
it 'returns the session id' do
|
112
|
-
store.send(:set_session, env, session_id, session_data, options)
|
113
|
+
store.send(:set_session, env, session_id, session_data, options)
|
114
|
+
.should eq(session_id)
|
113
115
|
end
|
114
116
|
|
115
117
|
end
|
@@ -120,7 +122,8 @@ describe RedisSessionStore do
|
|
120
122
|
end
|
121
123
|
|
122
124
|
it 'returns false' do
|
123
|
-
store.send(:set_session, env, session_id, session_data, options)
|
125
|
+
store.send(:set_session, env, session_id, session_data, options)
|
126
|
+
.should eq(false)
|
124
127
|
end
|
125
128
|
end
|
126
129
|
|
@@ -147,7 +150,8 @@ describe RedisSessionStore do
|
|
147
150
|
it 'should return an empty session hash' do
|
148
151
|
store.stub(:redis).and_raise(Errno::ECONNREFUSED)
|
149
152
|
|
150
|
-
expect(store.send(:get_session, double('env'), fake_key))
|
153
|
+
expect(store.send(:get_session, double('env'), fake_key))
|
154
|
+
.to eq([fake_key, {}])
|
151
155
|
end
|
152
156
|
end
|
153
157
|
end
|
@@ -162,15 +166,25 @@ describe RedisSessionStore do
|
|
162
166
|
cookie_hash.stub(:[] => fake_key)
|
163
167
|
end
|
164
168
|
|
165
|
-
it '
|
169
|
+
it 'deletes the prefixed key from redis' do
|
166
170
|
redis = double('redis')
|
167
171
|
store.stub(redis: redis)
|
168
|
-
expect(redis).to receive(:del)
|
172
|
+
expect(redis).to receive(:del)
|
173
|
+
.with("#{options[:key_prefix]}#{fake_key}")
|
169
174
|
|
170
175
|
store.send(:destroy, env)
|
171
176
|
end
|
172
|
-
|
173
177
|
end
|
174
178
|
|
179
|
+
context 'when destroyed via #destroy_session' do
|
180
|
+
it 'deletes the prefixed key from redis' do
|
181
|
+
redis = double('redis')
|
182
|
+
sid = store.send(:generate_sid)
|
183
|
+
store.stub(redis: redis)
|
184
|
+
expect(redis).to receive(:del).with("#{options[:key_prefix]}#{sid}")
|
185
|
+
|
186
|
+
store.send(:destroy_session, {}, sid, nil)
|
187
|
+
end
|
188
|
+
end
|
175
189
|
end
|
176
190
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis-session-store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mathias Meyer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|