class ActionDispatch::Session::MultiSessionStore

Constants

DEFAULT_PARAM_NAME
DEFAULT_SESSION_EXPIRATION

Public Class Methods

new(app, options = {}) click to toggle source
Calls superclass method
# File lib/multi_session_store.rb, line 14
def initialize(app, options = {})
  options[:expire_after] ||= DEFAULT_SESSION_EXPIRATION
  options[:param_name] ||= DEFAULT_PARAM_NAME
  options[:serializer] ||= JSON
  @redis = options[:redis]
  @param_name = options[:param_name]
  @serializer = options[:serializer]
  super
end

Public Instance Methods

delete_session(env, sid, options) click to toggle source
# File lib/multi_session_store.rb, line 44
def delete_session(env, sid, options)
  @redis.del session_store_key(env, sid)
  sid
end
find_session(env, sid) click to toggle source
# File lib/multi_session_store.rb, line 24
def find_session(env, sid)
  if sid
    serialized_session_data = @redis.get session_store_key(env, sid)
    session_data = serialized_session_data ? @serializer.parse(serialized_session_data) : {}
    [sid, session_data]
  else
    [generate_sid, {}]
  end
end
validate_sessions(&block) click to toggle source
# File lib/multi_session_store.rb, line 49
def validate_sessions(&block)
  all_sessions.each do |key, session|
    @redis.del key unless block.call session
  end
end
write_session(env, sid, session, options) click to toggle source
# File lib/multi_session_store.rb, line 34
def write_session(env, sid, session, options)
  key = session_store_key env, sid
  if session
    @redis.set key, @serializer.dump(session), ex: options[:expire_after]
  else
    @redis.del key
  end
  sid
end

Private Instance Methods

all_sessions() click to toggle source
# File lib/multi_session_store.rb, line 62
def all_sessions
  session_store_keys.each_with_object({}) do |key, memo|
    serialized_value = @redis.get key
    next if serialized_value.nil?
    memo[key] = @serializer.parse serialized_value
  end
end
session_store_key(env, sid) click to toggle source
# File lib/multi_session_store.rb, line 57
def session_store_key(env, sid)
  subsession_id = env.params[@param_name] || 'no_subsession'
  "_session_id:#{sid}:#{subsession_id}"
end
session_store_keys() click to toggle source
# File lib/multi_session_store.rb, line 70
def session_store_keys
  @redis.keys "_session_id:*"
end