lib/timeouter/timer.rb in timeouter-0.1.0 vs lib/timeouter/timer.rb in timeouter-0.1.1
- old
+ new
@@ -1,54 +1,53 @@
require 'timeout'
module Timeouter
class Timer
- attr_reader :started_at, :exhausted_at
+ attr_reader :timeout, :started_at#, :exhausted_at
- def initialize(timeout = 0, eclass: Timeouter::TimeoutError, emessage: 'execution expired')
+ def initialize(timeout = 0, eclass: nil, message: nil)
# ensure only positive timeouts
timeout ||= 0
- timeout = [timeout, 0].max
+ @timeout = [timeout, 0].max
- @eclass = eclass
- @emessage = emessage
+ @eclass = eclass || Timeouter::TimeoutError
+ @message = message || 'execution expired'
@started_at = Time.now
- @exhausted_at = timeout > 0 ? @started_at + timeout : nil
end
# elapsed time from creation
def elapsed
Time.now - @started_at
end
# time left to be exhausted or nil if timeout was 0
def left
- @exhausted_at && [@exhausted_at - Time.now, 0].max
+ (@timeout > 0) ? [@timeout - elapsed, 0].max : nil
end
# is timeout exhausted? or nil when timeout was 0
def exhausted?
- @exhausted_at && (@exhausted_at < Time.now)
+ (@timeout > 0) ? elapsed > @timeout : nil
end
# is timeout NOT exhausted? or true when timeout was 0
def running?
!exhausted?
end
# ensure timeout NOT exhausted raise exception otherwise
- def running!(eclass = @eclass, message: @emessage)
+ def running!(eclass = @eclass, message: @message)
!exhausted? || (raise eclass.new(message))
end
# run block in loop until timeout reached. Use break for returning result
def loop
yield(self) while self.running?
end
- def loop!(eclass = @eclass, message: @emessage)
+ def loop!(eclass = @eclass, message: @message)
yield(self) while self.running!(eclass, message: message)
end
end
end