| Class | Wee::Application |
| In: |
lib/wee/application.rb
|
| Parent: | Object |
A Wee::Application manages all Session‘s of a single application. It dispatches the request to the correct handler by examining the request.
Creates a new application. The block, when called, must return a new Session instance.
Wee::Application.new { Wee::Session.new(root_component) }
# File lib/wee/application.rb, line 25 def initialize(max_sessions=10_000, &block) @session_factory = block || raise(ArgumentError) @session_ids ||= Wee::IdGenerator::Secure.new @sessions = SessionCache.new(max_sessions) @mutex = Mutex.new end
Handles a web request
# File lib/wee/application.rb, line 42 def call(env) request = Wee::Request.new(env) if request.session_id session = @mutex.synchronize { @sessions[request.session_id] } if session and session.alive? session.call(env) else url = request.build_url(:session_id => nil, :page_id => nil) Wee::RefreshResponse.new("Invalid or expired session", url).finish end else session = new_session() url = request.build_url(:session_id => session.id, :page_id => nil) Wee::RedirectResponse.new(url).finish end end
Garbage collect dead sessions
# File lib/wee/application.rb, line 35 def cleanup_sessions @mutex.synchronize { @sessions.garbage_collect } end
# File lib/wee/application.rb, line 69 def insert_session(session, retries=3) retries.times do @mutex.synchronize { id = @session_ids.next if @sessions[id].nil? @sessions[id] = session session.id = id return end } end raise end