class Rack::Session::Mongo

Constants

DEFAULT_OPTIONS

Public Class Methods

new(app, options={}) click to toggle source
Calls superclass method
# File lib/rack_session_mongo.rb, line 6
def initialize(app, options={})
    super
    @coll = options[:collection]
    @pool={}
    @coll.find.each do |x|
        @pool.store x[:sid], x[:session]
    end
    @mutex = Mutex.new
end

Public Instance Methods

delete(sid) click to toggle source
# File lib/rack_session_mongo.rb, line 25
def delete(sid)
    @pool.delete(sid)
    @coll.delete(:sid => sid)
end
delete_session(req, session_id, options) click to toggle source
# File lib/rack_session_mongo.rb, line 50
def delete_session(req, session_id, options)
    with_lock(req) do
        delete(session_id)
        generate_sid unless options[:drop]
    end
end
find_session(req, sid) click to toggle source
# File lib/rack_session_mongo.rb, line 35
def find_session(req, sid)
    with_lock(req) do
        unless sid and session=get(sid) 
            sid, session = generate_sid, {}
            store sid, session
        end
        [sid, session]
    end
end
Also aliased as: get_session
generate_sid() click to toggle source
Calls superclass method
# File lib/rack_session_mongo.rb, line 29
def generate_sid
    loop do
        sid = super
        break sid unless include?(sid)
    end
end
get(sid) click to toggle source
# File lib/rack_session_mongo.rb, line 22
def get(sid)
    @pool[sid]
end
get_session(req, sid)
Alias for: find_session
include?(sid) click to toggle source
# File lib/rack_session_mongo.rb, line 15
def include?(sid)
    @pool.has_key? sid
end
set_session(req, session_id, new_session, options)
Alias for: write_session
store(sid,session) click to toggle source
# File lib/rack_session_mongo.rb, line 18
def store(sid,session)
    @pool.store sid, session
    @coll.update_one({:sid => sid},{:sid => sid, :session => session},{:upsert => true})
end
with_lock(req) { || ... } click to toggle source
# File lib/rack_session_mongo.rb, line 56
def with_lock(req)
    @mutex.lock
    yield
    ensure
    @mutex.unlock if @mutex.locked?
end
write_session(req, session_id, new_session, options) click to toggle source
# File lib/rack_session_mongo.rb, line 44
def write_session(req, session_id, new_session, options)
    with_lock(req) do
        store session_id, new_session
        session_id
    end
end
Also aliased as: set_session