Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ Metrics/BlockLength:
Exclude:
- 'spec/**/*.rb'

Metrics/LineLength:
Max: 100

Security/MarshalLoad:
Enabled: false

Expand Down
2 changes: 1 addition & 1 deletion .rubocop_todo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@
# Offense count: 1
# Configuration parameters: CountComments.
Metrics/ClassLength:
Max: 108
Max: 110
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@ My::Application.config.session_store :redis_session_store, {

**Note** The session will *always* be destroyed when it cannot be loaded.

### Other notes

It returns with_indifferent_access if ActiveSupport is defined

## Rails 2 Compatibility

This gem is currently only compatible with Rails 3+. If you need
Expand Down
21 changes: 11 additions & 10 deletions lib/redis-session-store.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class RedisSessionStore < ActionDispatch::Session::AbstractStore
end
end

USE_INDIFFERENT_ACCESS = defined?(ActiveSupport).freeze
# ==== Options
# * +:key+ - Same as with the other cookie stores, key name
# * +:redis+ - A hash with redis-specific options
Expand Down Expand Up @@ -86,16 +87,15 @@ def prefixed(sid)
"#{default_options[:key_prefix]}#{sid}"
end

def get_session(env, sid)
unless sid && (session = load_session_from_redis(sid))
sid = generate_sid
session = {}
end
def session_default_values
[generate_sid, USE_INDIFFERENT_ACCESS ? {}.with_indifferent_access : {}]
end

[sid, session]
def get_session(env, sid)
sid && (session = load_session_from_redis(sid)) ? [sid, session] : session_default_values
rescue Errno::ECONNREFUSED, Redis::CannotConnectError => e
on_redis_down.call(e, env, sid) if on_redis_down
[generate_sid, {}]
session_default_values
end
alias find_session get_session

Expand All @@ -111,7 +111,8 @@ def load_session_from_redis(sid)
end

def decode(data)
serializer.load(data)
session = serializer.load(data)
USE_INDIFFERENT_ACCESS ? session.with_indifferent_access : session
end

def set_session(env, sid, session_data, options = nil)
Expand All @@ -121,10 +122,10 @@ def set_session(env, sid, session_data, options = nil)
else
redis.set(prefixed(sid), encode(session_data))
end
return sid
sid
rescue Errno::ECONNREFUSED, Redis::CannotConnectError => e
on_redis_down.call(e, env, sid) if on_redis_down
return false
false
end
alias write_session set_session

Expand Down