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
include?(sid)
click to toggle source
# File lib/rack_session_mongo.rb, line 15 def include?(sid) @pool.has_key? sid end
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