Class: Wee::Session
Defined Under Namespace
Classes: AbortCallbackProcessing, MutexSerializer, Page, ThreadSerializer
Instance Attribute Summary collapse
-
#application ⇒ Object
Points to the Wee::Application object this session belongs to.
-
#expire_after ⇒ Object
Expire the session after this number of seconds of inactivity.
-
#id ⇒ Object
The (application-wide) unique id of this session.
-
#max_lifetime ⇒ Object
The maximum lifetime of this session in seconds.
-
#max_requests ⇒ Object
The maximum number of requests this session is allowed to serve.
Class Method Summary collapse
-
.current ⇒ Object
Returns the current session (thread-local).
Instance Method Summary collapse
-
#alive? ⇒ Boolean
Queries whether the session is still alive.
-
#call(env) ⇒ Object
Handles a web request.
-
#dead? ⇒ Boolean
Queries whether the session is dead.
-
#initialize(root_component, serializer = nil, page_cache_capacity = 20) ⇒ Session
constructor
Creates a new session.
- #render_ajax_proc(block, component) ⇒ Object
-
#send_response(response) ⇒ Object
Send a premature response.
-
#statistics ⇒ Object
Returns some statistics.
-
#terminate ⇒ Object
Terminates the session.
Constructor Details
#initialize(root_component, serializer = nil, page_cache_capacity = 20) ⇒ Session
Creates a new session.
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/wee/session.rb', line 95 def initialize(root_component, serializer=nil, page_cache_capacity=20) @root_component = root_component @page_cache = Wee::LRUCache.new(page_cache_capacity) @page_ids = Wee::IdGenerator::Sequential.new @current_page = nil @running = true @expire_after = 30*60 @max_lifetime = nil @max_requests = nil @last_access = @creation_time = Time.now @request_count = 0 @serializer = serializer || MutexSerializer.new end |
Instance Attribute Details
#application ⇒ Object
Points to the Wee::Application object this session belongs to.
65 66 67 |
# File 'lib/wee/session.rb', line 65 def application @application end |
#expire_after ⇒ Object
Expire the session after this number of seconds of inactivity. If this value is nil
, the Session will never expire due to inactivity. (but still may expire for example due to max_lifetime).
Default: 1800
seconds (30 minutes)
74 75 76 |
# File 'lib/wee/session.rb', line 74 def expire_after @expire_after end |
#id ⇒ Object
The (application-wide) unique id of this session.
60 61 62 |
# File 'lib/wee/session.rb', line 60 def id @id end |
#max_lifetime ⇒ Object
The maximum lifetime of this session in seconds. A value of nil
means infinite lifetime.
Default: nil
(infinite lifetime)
82 83 84 |
# File 'lib/wee/session.rb', line 82 def max_lifetime @max_lifetime end |
#max_requests ⇒ Object
The maximum number of requests this session is allowed to serve. A value of nil
means no limitation.
Default: nil
(infinite number of requests)
90 91 92 |
# File 'lib/wee/session.rb', line 90 def max_requests @max_requests end |
Class Method Details
.current ⇒ Object
Returns the current session (thread-local).
159 160 161 |
# File 'lib/wee/session.rb', line 159 def self.current Thread.current[:wee_session] || (raise "Not in session") end |
Instance Method Details
#alive? ⇒ Boolean
Queries whether the session is still alive.
126 127 128 129 130 131 132 133 |
# File 'lib/wee/session.rb', line 126 def alive? now = Time.now return false if not @running return false if @expire_after and now - @last_access > @expire_after return false if @max_lifetime and now - @creation_time > @max_lifetime return false if @max_requests and @request_count >= @max_requests return true end |
#call(env) ⇒ Object
Handles a web request.
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/wee/session.rb', line 166 def call(env) if env['wee.session'] # we are already serialized raise if env['wee.session'] != self begin Thread.current[:wee_session] = self @request_count += 1 @last_access = Time.now awake response = handle(env) sleep return response ensure Thread.current[:wee_session] = nil end else env['wee.session'] = self @serializer.call(env) end end |
#dead? ⇒ Boolean
Queries whether the session is dead.
138 139 140 |
# File 'lib/wee/session.rb', line 138 def dead? not alive? end |
#render_ajax_proc(block, component) ⇒ Object
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 |
# File 'lib/wee/session.rb', line 252 def render_ajax_proc(block, component) proc { r = component.renderer_class.new r.session = self r.request = @request r.response = Wee::Response.new r.document = Wee::HtmlDocument.new r.callbacks = @page.callbacks r.current_component = component begin block.call(r) ensure r.close end r.response << r.document.to_s send_response(r.response) } end |
#send_response(response) ⇒ Object
Send a premature response
190 191 192 |
# File 'lib/wee/session.rb', line 190 def send_response(response) raise AbortCallbackProcessing.new(response) end |
#statistics ⇒ Object
Returns some statistics
145 146 147 148 149 150 151 152 153 154 |
# File 'lib/wee/session.rb', line 145 def statistics now = Time.now { :last_access => @last_access, # The time when this session was last accessed :inactivity => now - @last_access, # The number of seconds of inactivity :creation_time => @creation_time, # The time at which this session was created :lifetime => now - @creation_time, # The lifetime of this session in seconds :request_count => @request_count # The number of requests served by this session } end |
#terminate ⇒ Object
Terminates the session.
This will usually not immediatly terminate the session from running, but further requests will not be answered.
119 120 121 |
# File 'lib/wee/session.rb', line 119 def terminate @running = false end |