class Timeouter::Timer

Attributes

started_at[R]
timeout[R]

Public Class Methods

new(timeout = 0, eclass: nil, message: nil) click to toggle source
# File lib/timeouter/timer.rb, line 8
def initialize(timeout = 0, eclass: nil, message: nil)
  # ensure only positive timeouts
  timeout ||= 0
  @timeout = [timeout, 0].max

  @eclass = eclass || Timeouter::TimeoutError
  @message = message || 'execution expired'

  @started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)
end

Public Instance Methods

elapsed() click to toggle source

elapsed time from creation

# File lib/timeouter/timer.rb, line 20
def elapsed
  Process.clock_gettime(Process::CLOCK_MONOTONIC) - @started_at
end
exhausted?() click to toggle source

is timeout exhausted? or nil when timeout was 0

# File lib/timeouter/timer.rb, line 30
def exhausted?
  (@timeout > 0) ? elapsed > @timeout : nil
end
left() click to toggle source

time left to be exhausted or nil if timeout was 0

# File lib/timeouter/timer.rb, line 25
def left
  (@timeout > 0) ? [@timeout - elapsed, 0].max : nil
end
loop() { |self| ... } click to toggle source

run block in loop until timeout reached. Use break for returning result

# File lib/timeouter/timer.rb, line 45
def loop
  yield(self) while self.running?
end
loop!(eclass = @eclass, message: @message) { |self| ... } click to toggle source
# File lib/timeouter/timer.rb, line 49
def loop!(eclass = @eclass, message: @message)
  yield(self) while self.running!(eclass, message: message)
end
running!(eclass = @eclass, message: @message) click to toggle source

ensure timeout NOT exhausted raise exception otherwise

# File lib/timeouter/timer.rb, line 40
def running!(eclass = @eclass, message: @message)
  !exhausted? || (raise eclass.new(message))
end
running?() click to toggle source

is timeout NOT exhausted? or true when timeout was 0

# File lib/timeouter/timer.rb, line 35
def running?
  !exhausted?
end