Class: Wee::Session
- Includes:
- LRUCache::Item
- Defined in:
- lib/wee/locale.rb,
lib/wee/session.rb
Defined Under Namespace
Classes: AbortProcessing, 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.
- #locale ⇒ Object
-
#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.
Attributes included from LRUCache::Item
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.
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/wee/session.rb', line 103 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.
73 74 75 |
# File 'lib/wee/session.rb', line 73 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)
82 83 84 |
# File 'lib/wee/session.rb', line 82 def expire_after @expire_after end |
#id ⇒ Object
The (application-wide) unique id of this session.
68 69 70 |
# File 'lib/wee/session.rb', line 68 def id @id end |
#locale ⇒ Object
45 46 47 |
# File 'lib/wee/locale.rb', line 45 def locale @locale || application.default_locale end |
#max_lifetime ⇒ Object
The maximum lifetime of this session in seconds. A value of nil
means infinite lifetime.
Default: nil
(infinite lifetime)
90 91 92 |
# File 'lib/wee/session.rb', line 90 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)
98 99 100 |
# File 'lib/wee/session.rb', line 98 def max_requests @max_requests end |
Class Method Details
.current ⇒ Object
Returns the current session (thread-local).
167 168 169 |
# File 'lib/wee/session.rb', line 167 def self.current Thread.current[:wee_session] || (raise "Not in session") end |
Instance Method Details
#alive? ⇒ Boolean
Queries whether the session is still alive.
134 135 136 137 138 139 140 141 |
# File 'lib/wee/session.rb', line 134 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.
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/wee/session.rb', line 174 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.
146 147 148 |
# File 'lib/wee/session.rb', line 146 def dead? not alive? end |
#render_ajax_proc(block, component) ⇒ Object
260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 |
# File 'lib/wee/session.rb', line 260 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
198 199 200 |
# File 'lib/wee/session.rb', line 198 def send_response(response) raise AbortProcessing.new(response) end |
#statistics ⇒ Object
Returns some statistics
153 154 155 156 157 158 159 160 161 162 |
# File 'lib/wee/session.rb', line 153 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.
127 128 129 |
# File 'lib/wee/session.rb', line 127 def terminate @running = false end |