Class: Rack::Session::Juno
- Inherits:
-
Abstract::ID
- Object
- Abstract::ID
- Rack::Session::Juno
- Defined in:
- lib/rack/session/juno.rb
Instance Attribute Summary collapse
-
#mutex ⇒ Object
readonly
Returns the value of attribute mutex.
-
#pool ⇒ Object
readonly
Returns the value of attribute pool.
Instance Method Summary collapse
- #destroy_session(env, session_id, options) ⇒ Object
- #generate_sid ⇒ Object
- #get_session(env, sid) ⇒ Object
-
#initialize(app, options = {}, &block) ⇒ Juno
constructor
A new instance of Juno.
- #set_session(env, session_id, new_session, options) ⇒ Object
- #with_lock(env) ⇒ Object
Constructor Details
#initialize(app, options = {}, &block) ⇒ Juno
Returns a new instance of Juno.
10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/rack/session/juno.rb', line 10 def initialize(app, = {}, &block) super if block raise ArgumentError, 'Use either block or option :store' if [:store] @pool = ::Juno.build(&block) else raise ArgumentError, 'Option :store is required' unless @pool = [:store] @pool = ::Juno.new(@pool, :expires => true) if Symbol === @pool end @mutex = Mutex.new end |
Instance Attribute Details
#mutex ⇒ Object (readonly)
Returns the value of attribute mutex.
8 9 10 |
# File 'lib/rack/session/juno.rb', line 8 def mutex @mutex end |
#pool ⇒ Object (readonly)
Returns the value of attribute pool.
8 9 10 |
# File 'lib/rack/session/juno.rb', line 8 def pool @pool end |
Instance Method Details
#destroy_session(env, session_id, options) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/rack/session/juno.rb', line 47 def destroy_session(env, session_id, ) with_lock(env) do @pool.delete(session_id) generate_sid unless [:drop] end end |
#generate_sid ⇒ Object
22 23 24 25 26 27 |
# File 'lib/rack/session/juno.rb', line 22 def generate_sid loop do sid = super break sid unless @pool.key?(sid) end end |
#get_session(env, sid) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/rack/session/juno.rb', line 29 def get_session(env, sid) with_lock(env) do unless sid && session = @pool[sid] sid, session = generate_sid, {} @pool[sid] = session end [sid, session] end end |
#set_session(env, session_id, new_session, options) ⇒ Object
39 40 41 42 43 44 45 |
# File 'lib/rack/session/juno.rb', line 39 def set_session(env, session_id, new_session, ) with_lock(env) do @pool.store(session_id, new_session, [:expire_after] ? {:expires => [:expire_after]} : {}) session_id end end |
#with_lock(env) ⇒ Object
54 55 56 57 58 59 |
# File 'lib/rack/session/juno.rb', line 54 def with_lock(env) @mutex.lock if env['rack.multithread'] yield ensure @mutex.unlock if @mutex.locked? end |