class Timers::Wait

An exclusive, monotonic timeout class.

Attributes

duration[R]
remaining[R]

Public Class Methods

for(duration) { |nil| ... } click to toggle source
# File lib/timers/wait.rb, line 28
def self.for(duration, &block)
        if duration
                timeout = new(duration)
                
                timeout.while_time_remaining(&block)
        else
                loop do
                        yield(nil)
                end
        end
end
new(duration) click to toggle source
# File lib/timers/wait.rb, line 40
def initialize(duration)
        @duration = duration
        @remaining = true
end

Public Instance Methods

while_time_remaining() { |remaining while time_remaining?| ... } click to toggle source

Yields while time remains for work to be done:

# File lib/timers/wait.rb, line 49
def while_time_remaining
        @interval = Interval.new
        @interval.start
        
        yield @remaining while time_remaining?
ensure
        @interval.stop
        @interval = nil
end

Private Instance Methods

time_remaining?() click to toggle source
# File lib/timers/wait.rb, line 61
def time_remaining?
        @remaining = (@duration - @interval.to_f)
        
        @remaining > 0
end