Class: Rack::Session::Mongo
- Inherits:
-
Abstract::ID
- Object
- Abstract::ID
- Rack::Session::Mongo
- Defined in:
- lib/rack_session_mongo.rb
Constant Summary collapse
- DEFAULT_OPTIONS =
Rack::Session::Abstract::ID::DEFAULT_OPTIONS.merge :drop => false
Instance Method Summary collapse
- #delete(sid) ⇒ Object
- #delete_session(req, session_id, options) ⇒ Object
- #find_session(req, sid) ⇒ Object (also: #get_session)
- #generate_sid ⇒ Object
- #get(sid) ⇒ Object
- #include?(sid) ⇒ Boolean
-
#initialize(app, options = {}) ⇒ Mongo
constructor
A new instance of Mongo.
- #store(sid, session) ⇒ Object
- #with_lock(req) ⇒ Object
- #write_session(req, session_id, new_session, options) ⇒ Object (also: #set_session)
Constructor Details
#initialize(app, options = {}) ⇒ Mongo
Returns a new instance of Mongo.
6 7 8 9 10 11 12 13 14 |
# File 'lib/rack_session_mongo.rb', line 6 def initialize(app, ={}) super @coll = [:collection] @pool={} @coll.find.each do |x| @pool.store x[:sid], x[:session] end @mutex = Mutex.new end |
Instance Method Details
#delete(sid) ⇒ Object
25 26 27 28 |
# 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) ⇒ Object
50 51 52 53 54 55 |
# File 'lib/rack_session_mongo.rb', line 50 def delete_session(req, session_id, ) with_lock(req) do delete(session_id) generate_sid unless [:drop] end end |
#find_session(req, sid) ⇒ Object Also known as: get_session
35 36 37 38 39 40 41 42 43 |
# 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 |
#generate_sid ⇒ Object
29 30 31 32 33 34 |
# File 'lib/rack_session_mongo.rb', line 29 def generate_sid loop do sid = super break sid unless include?(sid) end end |
#get(sid) ⇒ Object
22 23 24 |
# File 'lib/rack_session_mongo.rb', line 22 def get(sid) @pool[sid] end |
#include?(sid) ⇒ Boolean
15 16 17 |
# File 'lib/rack_session_mongo.rb', line 15 def include?(sid) @pool.has_key? sid end |
#store(sid, session) ⇒ Object
18 19 20 21 |
# 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) ⇒ Object
56 57 58 59 60 61 |
# 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) ⇒ Object Also known as: set_session
44 45 46 47 48 49 |
# File 'lib/rack_session_mongo.rb', line 44 def write_session(req, session_id, new_session, ) with_lock(req) do store session_id, new_session session_id end end |