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(env, sid, options)
click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 65 def delete_session(env, sid, options) destroy_session(env, sid, options) end
destroy(env)
click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 78 def destroy(env) if sid = current_session_id(env) _, record = get_session_record(env, sid) record.destroy env[SESSION_RECORD_KEY] = nil end end
destroy_session(env, sid, options)
click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 69 def destroy_session(env, sid, options) unless options[:renew] destroy(env) generate_sid if !options[:drop] or options[:renew] else sid end end
find_or_initialize_session(sid)
click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 52 def find_or_initialize_session(sid) session = (sid && session_class.where(:_id => sid).first) || session_class.new(:_id => generate_sid) [session._id, session] end
find_session(env, sid)
click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 34 def find_session(env, sid) get_session(env, sid) end
generate_sid()
click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 23 def generate_sid # 20 random bytes in url-safe base64 SecureRandom.base64(20).gsub('=','').gsub('+','-').gsub('/','_') 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) sid, record = find_or_initialize_session(sid) env[SESSION_RECORD_KEY] = record [sid, unpack(record.data)] end
get_session_record(env, sid)
click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 57 def get_session_record(env, sid) if env.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
pack(data)
click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 86 def pack(data) Marshal.dump(data) end
session_class()
click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 19 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 = pack(session_data) # 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
unpack(packed)
click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 90 def unpack(packed) return nil unless packed data = packed.respond_to?(:data) ? packed.data : packed.to_s Marshal.load(StringIO.new(data)) end
write_session(env, sid, session_data, options = {})
click to toggle source
# File lib/mongo_session_store/mongo_store_base.rb, line 47 def write_session(env, sid, session_data, options = {}) set_session(env, sid, session_data, options) end