Module: FrugalTimeout
- Defined in:
- lib/frugal_timeout.rb,
lib/frugal_timeout/support.rb
Overview
Copyright © 2013, 2014 by Dmitry Maksyoma <[email protected]>
Defined Under Namespace
Modules: Hookable Classes: Error, Request, RequestQueue, SleeperNotifier, SortedQueue, Storage
Class Method Summary collapse
-
.dropin! ⇒ Object
Ensure that calling timeout() will use FrugalTimeout.timeout().
-
.on_enforce(&b) ⇒ Object
:nodoc:.
-
.on_ensure(&b) ⇒ Object
:nodoc:.
-
.timeout(sec, klass = nil) ⇒ Object
Same as Timeout.timeout().
Class Method Details
.dropin! ⇒ Object
Ensure that calling timeout() will use FrugalTimeout.timeout()
226 227 228 229 230 231 |
# File 'lib/frugal_timeout.rb', line 226 def self.dropin! Object.class_eval \ 'def timeout t, klass=nil, &b FrugalTimeout.timeout t, klass, &b end' end |
.on_enforce(&b) ⇒ Object
:nodoc:
233 234 235 |
# File 'lib/frugal_timeout.rb', line 233 def self.on_enforce &b #:nodoc: @requestQueue.onEnforce &b end |
.on_ensure(&b) ⇒ Object
:nodoc:
237 238 239 |
# File 'lib/frugal_timeout.rb', line 237 def self.on_ensure &b #:nodoc: @onEnsure = b end |
.timeout(sec, klass = nil) ⇒ Object
Same as Timeout.timeout()
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 |
# File 'lib/frugal_timeout.rb', line 242 def self.timeout sec, klass=nil return yield sec if sec.nil? || sec <= 0 innerException = klass || Class.new(Timeout::ExitException) begin request = @requestQueue.queue(sec, innerException) # Defuse is here only for the case when exception comes from the yield # block. Otherwise, when timeout exception is raised, the request is # defused automatically. # # Now, if in ensure, timeout exception comes, the request has already been # defused automatically, so even if ensure is interrupted, there's no # problem. begin yield sec ensure request.defuse! end rescue innerException => e raise if klass raise Error, e., e.backtrace ensure @onEnsure.call if @onEnsure end end |