class ActionDispatch::Session::MongoStoreBase

Constants

ENV_SESSION_OPTIONS_KEY
SESSION_RECORD_KEY

Public Class Methods

session_class() click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 14
def self.session_class
  self::Session
end

Private Instance Methods

delete_session(req, sid, options) click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 63
def delete_session(req, sid, options)
  destroy_session(req.env, sid, options)
end
destroy(env, sid) click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 72
def destroy(env, sid)
  return unless sid

  _, record = get_session_record(env, sid)
  record.destroy
  env[SESSION_RECORD_KEY] = nil
end
destroy_session(env, sid, options) click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 67
def destroy_session(env, sid, options)
  destroy(env, sid)
  generate_sid unless options[:drop]
end
find_or_initialize_session(id) click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 48
def find_or_initialize_session(id)
  existing_session = (id && session_class.where(:_id => id.to_s).first)
  session = existing_session if existing_session
  session ||= session_class.new(:_id => generate_sid)
  [session._id, session]
end
find_session(req, sid) click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 24
def find_session(req, sid)
  get_session(req.env, sid)
end
get_session(env, sid) click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 28
def get_session(env, sid)
  id, record = find_or_initialize_session(sid)
  env[SESSION_RECORD_KEY] = record
  [id, record.data]
end
get_session_record(env, sid) click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 55
def get_session_record(env, sid)
  if env[ENV_SESSION_OPTIONS_KEY][:id].nil? || !env[SESSION_RECORD_KEY]
    sid, env[SESSION_RECORD_KEY] = find_or_initialize_session(sid)
  end

  [sid, env[SESSION_RECORD_KEY]]
end
session_class() click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 20
def session_class
  self.class.session_class
end
set_session(env, sid, session_data, _options = {}) { || ... } click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 38
def set_session(env, sid, session_data, _options = {})
  id, record = get_session_record(env, sid)
  record.data = session_data
  yield if block_given?
  # Rack spec dictates that set_session should return true or false
  # depending on whether or not the session was saved or not.
  # However, ActionPack seems to want a session id instead.
  record.save ? id : false
end
write_session(req, sid, session_data, options) click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 34
def write_session(req, sid, session_data, options)
  set_session(req.env, sid, session_data, options)
end