redis-session-store 0.8.0 → 0.8.1
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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +1 -1
- data/.travis.yml +7 -4
- data/AUTHORS.md +1 -0
- data/CHANGELOG.md +5 -0
- data/lib/redis-session-store.rb +14 -8
- data/redis-session-store.gemspec +1 -1
- data/spec/redis_session_store_spec.rb +8 -8
- data/spec/support.rb +5 -5
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0158a4d89d8a2848b75766683f7e6e5add9c5d4f
|
4
|
+
data.tar.gz: 9551ca90b67dad5c67ab4d028ee5a0bbafe1ef58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 587a5a53e8df3fd350c95600754737fef57b697db50834e5e8113a41841c186aa6a4a3f918c3755010a49e0ff62abb80a70f2bcf67c6d83990256de343a49649
|
7
|
+
data.tar.gz: 6bfe6da52599e3ffabc5dfbbea48aedd36f655b2e5ac33023112fffc6e4907105990d1673b7dca816bd0119a3ed105870522556e517e95b1dcfadf353a64fa5e
|
data/.rubocop_todo.yml
CHANGED
data/.travis.yml
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
---
|
2
2
|
language: ruby
|
3
|
+
sudo: false
|
3
4
|
rvm:
|
4
5
|
- 1.9.3
|
5
|
-
- 2.
|
6
|
-
-
|
6
|
+
- 2.1.3
|
7
|
+
- jruby-19mode
|
8
|
+
matrix:
|
9
|
+
allow_failures:
|
10
|
+
- rvm: jruby-19mode
|
7
11
|
notifications:
|
8
12
|
email: false
|
9
13
|
deploy:
|
@@ -14,5 +18,4 @@ deploy:
|
|
14
18
|
on:
|
15
19
|
tags: true
|
16
20
|
repo: roidrage/redis-session-store
|
17
|
-
|
18
|
-
rvm: 2.0.0
|
21
|
+
rvm: 2.1.3
|
data/AUTHORS.md
CHANGED
data/CHANGELOG.md
CHANGED
data/lib/redis-session-store.rb
CHANGED
@@ -4,10 +4,14 @@ require 'redis'
|
|
4
4
|
# Redis session storage for Rails, and for Rails only. Derived from
|
5
5
|
# the MemCacheStore code, simply dropping in Redis instead.
|
6
6
|
class RedisSessionStore < ActionDispatch::Session::AbstractStore
|
7
|
-
VERSION = '0.8.
|
7
|
+
VERSION = '0.8.1'
|
8
8
|
# Rails 3.1 and beyond defines the constant elsewhere
|
9
9
|
unless defined?(ENV_SESSION_OPTIONS_KEY)
|
10
|
-
|
10
|
+
if Rack.release.split('.').first.to_i > 1
|
11
|
+
ENV_SESSION_OPTIONS_KEY = Rack::RACK_SESSION_OPTIONS
|
12
|
+
else
|
13
|
+
ENV_SESSION_OPTIONS_KEY = Rack::Session::Abstract::ENV_SESSION_OPTIONS_KEY
|
14
|
+
end
|
11
15
|
end
|
12
16
|
|
13
17
|
# ==== Options
|
@@ -69,7 +73,7 @@ class RedisSessionStore < ActionDispatch::Session::AbstractStore
|
|
69
73
|
value && !value.empty? &&
|
70
74
|
redis.exists(prefixed(value))
|
71
75
|
)
|
72
|
-
rescue Errno::ECONNREFUSED => e
|
76
|
+
rescue Errno::ECONNREFUSED, Redis::CannotConnectError => e
|
73
77
|
on_redis_down.call(e, env, value) if on_redis_down
|
74
78
|
|
75
79
|
true
|
@@ -94,10 +98,11 @@ class RedisSessionStore < ActionDispatch::Session::AbstractStore
|
|
94
98
|
end
|
95
99
|
|
96
100
|
[sid, session]
|
97
|
-
rescue Errno::ECONNREFUSED => e
|
101
|
+
rescue Errno::ECONNREFUSED, Redis::CannotConnectError => e
|
98
102
|
on_redis_down.call(e, env, sid) if on_redis_down
|
99
103
|
[generate_sid, {}]
|
100
104
|
end
|
105
|
+
alias_method :find_session, :get_session
|
101
106
|
|
102
107
|
def load_session_from_redis(sid)
|
103
108
|
data = redis.get(prefixed(sid))
|
@@ -114,7 +119,7 @@ class RedisSessionStore < ActionDispatch::Session::AbstractStore
|
|
114
119
|
serializer.load(data)
|
115
120
|
end
|
116
121
|
|
117
|
-
def set_session(env, sid, session_data, options = nil)
|
122
|
+
def set_session(env, sid, session_data, options = nil)
|
118
123
|
expiry = (options || env.fetch(ENV_SESSION_OPTIONS_KEY))[:expire_after]
|
119
124
|
if expiry
|
120
125
|
redis.setex(prefixed(sid), expiry, encode(session_data))
|
@@ -122,10 +127,11 @@ class RedisSessionStore < ActionDispatch::Session::AbstractStore
|
|
122
127
|
redis.set(prefixed(sid), encode(session_data))
|
123
128
|
end
|
124
129
|
return sid
|
125
|
-
rescue Errno::ECONNREFUSED => e
|
130
|
+
rescue Errno::ECONNREFUSED, Redis::CannotConnectError => e
|
126
131
|
on_redis_down.call(e, env, sid) if on_redis_down
|
127
132
|
return false
|
128
133
|
end
|
134
|
+
alias_method :write_session, :set_session
|
129
135
|
|
130
136
|
def encode(session_data)
|
131
137
|
serializer.dump(session_data)
|
@@ -137,7 +143,7 @@ class RedisSessionStore < ActionDispatch::Session::AbstractStore
|
|
137
143
|
|
138
144
|
def destroy(env)
|
139
145
|
if env['rack.request.cookie_hash'] &&
|
140
|
-
|
146
|
+
(sid = env['rack.request.cookie_hash'][key])
|
141
147
|
destroy_session_from_sid(sid, drop: true, env: env)
|
142
148
|
end
|
143
149
|
false
|
@@ -146,7 +152,7 @@ class RedisSessionStore < ActionDispatch::Session::AbstractStore
|
|
146
152
|
def destroy_session_from_sid(sid, options = {})
|
147
153
|
redis.del(prefixed(sid))
|
148
154
|
(options || {})[:drop] ? nil : generate_sid
|
149
|
-
rescue Errno::ECONNREFUSED => e
|
155
|
+
rescue Errno::ECONNREFUSED, Redis::CannotConnectError => e
|
150
156
|
on_redis_down.call(e, options[:env] || {}, sid) if on_redis_down
|
151
157
|
end
|
152
158
|
|
data/redis-session-store.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
|
|
19
19
|
.match(/^ VERSION = '(.*)'/)[1]
|
20
20
|
|
21
21
|
gem.add_runtime_dependency 'redis'
|
22
|
-
gem.add_runtime_dependency 'actionpack', '>= 3', '< 5'
|
22
|
+
gem.add_runtime_dependency 'actionpack', '>= 3', '< 5.1'
|
23
23
|
|
24
24
|
gem.add_development_dependency 'fakeredis'
|
25
25
|
gem.add_development_dependency 'rake'
|
@@ -149,7 +149,7 @@ describe RedisSessionStore do
|
|
149
149
|
|
150
150
|
context 'when unsuccessfully persisting the session' do
|
151
151
|
before do
|
152
|
-
allow(store).to receive(:redis).and_raise(
|
152
|
+
allow(store).to receive(:redis).and_raise(Redis::CannotConnectError)
|
153
153
|
end
|
154
154
|
|
155
155
|
it 'returns false' do
|
@@ -169,7 +169,7 @@ describe RedisSessionStore do
|
|
169
169
|
|
170
170
|
context 'when redis is down' do
|
171
171
|
before do
|
172
|
-
allow(store).to receive(:redis).and_raise(
|
172
|
+
allow(store).to receive(:redis).and_raise(Redis::CannotConnectError)
|
173
173
|
store.on_redis_down = ->(*_a) { @redis_down_handled = true }
|
174
174
|
end
|
175
175
|
|
@@ -189,7 +189,7 @@ describe RedisSessionStore do
|
|
189
189
|
it 'explodes' do
|
190
190
|
expect do
|
191
191
|
store.send(:set_session, env, session_id, session_data, options)
|
192
|
-
end.to raise_error(
|
192
|
+
end.to raise_error(Redis::CannotConnectError)
|
193
193
|
end
|
194
194
|
end
|
195
195
|
end
|
@@ -243,7 +243,7 @@ describe RedisSessionStore do
|
|
243
243
|
|
244
244
|
context 'when redis is down' do
|
245
245
|
it 'returns true (fallback to old behavior)' do
|
246
|
-
allow(store).to receive(:redis).and_raise(
|
246
|
+
allow(store).to receive(:redis).and_raise(Redis::CannotConnectError)
|
247
247
|
expect(store.send(:session_exists?, :env)).to eq(true)
|
248
248
|
end
|
249
249
|
end
|
@@ -270,7 +270,7 @@ describe RedisSessionStore do
|
|
270
270
|
|
271
271
|
context 'when redis is down' do
|
272
272
|
before do
|
273
|
-
allow(store).to receive(:redis).and_raise(
|
273
|
+
allow(store).to receive(:redis).and_raise(Redis::CannotConnectError)
|
274
274
|
allow(store).to receive(:generate_sid).and_return('foop')
|
275
275
|
end
|
276
276
|
|
@@ -290,7 +290,7 @@ describe RedisSessionStore do
|
|
290
290
|
it 'explodes' do
|
291
291
|
expect do
|
292
292
|
store.send(:get_session, double('env'), fake_key)
|
293
|
-
end.to raise_error(
|
293
|
+
end.to raise_error(Redis::CannotConnectError)
|
294
294
|
end
|
295
295
|
end
|
296
296
|
end
|
@@ -317,7 +317,7 @@ describe RedisSessionStore do
|
|
317
317
|
|
318
318
|
context 'when redis is down' do
|
319
319
|
before do
|
320
|
-
allow(store).to receive(:redis).and_raise(
|
320
|
+
allow(store).to receive(:redis).and_raise(Redis::CannotConnectError)
|
321
321
|
end
|
322
322
|
|
323
323
|
it 'returns false' do
|
@@ -330,7 +330,7 @@ describe RedisSessionStore do
|
|
330
330
|
it 'explodes' do
|
331
331
|
expect do
|
332
332
|
store.send(:destroy, env)
|
333
|
-
end.to raise_error(
|
333
|
+
end.to raise_error(Redis::CannotConnectError)
|
334
334
|
end
|
335
335
|
end
|
336
336
|
end
|
data/spec/support.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# vim:fileencoding=utf-8
|
2
2
|
|
3
3
|
unless defined?(Rack::Session::Abstract::ENV_SESSION_OPTIONS_KEY)
|
4
|
-
module Rack
|
4
|
+
module Rack
|
5
5
|
module Session
|
6
|
-
module Abstract
|
6
|
+
module Abstract
|
7
7
|
ENV_SESSION_OPTIONS_KEY = 'rack.session.options'.freeze
|
8
8
|
end
|
9
9
|
end
|
@@ -11,9 +11,9 @@ unless defined?(Rack::Session::Abstract::ENV_SESSION_OPTIONS_KEY)
|
|
11
11
|
end
|
12
12
|
|
13
13
|
unless defined?(ActionDispatch::Session::AbstractStore)
|
14
|
-
module ActionDispatch
|
14
|
+
module ActionDispatch
|
15
15
|
module Session
|
16
|
-
class AbstractStore
|
16
|
+
class AbstractStore
|
17
17
|
ENV_SESSION_OPTIONS_KEY = 'rack.session.options'.freeze
|
18
18
|
DEFAULT_OPTIONS = {
|
19
19
|
key: '_session_id',
|
@@ -45,7 +45,7 @@ end
|
|
45
45
|
unless defined?(Rails)
|
46
46
|
require 'logger'
|
47
47
|
|
48
|
-
module Rails
|
48
|
+
module Rails
|
49
49
|
def self.logger
|
50
50
|
@logger ||= Logger.new('/dev/null')
|
51
51
|
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.8.
|
4
|
+
version: 0.8.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:
|
11
|
+
date: 2016-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: '3'
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: '5'
|
36
|
+
version: '5.1'
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '3'
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '5'
|
46
|
+
version: '5.1'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: fakeredis
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -163,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
163
|
version: '0'
|
164
164
|
requirements: []
|
165
165
|
rubyforge_project:
|
166
|
-
rubygems_version: 2.
|
166
|
+
rubygems_version: 2.5.1
|
167
167
|
signing_key:
|
168
168
|
specification_version: 4
|
169
169
|
summary: A drop-in replacement for e.g. MemCacheStore to store Rails sessions (and
|