Sha256: 6fc98ffc238cd60e59b4f4d4c5b90a16cae2bc6492e87d1546b83a07d26698c2

Contents?: true

Size: 663 Bytes

Versions: 3

Compression:

Stored size: 663 Bytes

Contents

require 'hitimes'

module Timers
  # An exclusive, monotonic timeout class.
  class Timeout
    def initialize(duration)
      @duration = duration
      @remaining = true
    end
    
    attr :duration
    attr :remaining
    
    # Yields while time remains for work to be done:
    def while_time_remaining(&block)
      @interval = Hitimes::Interval.new
      @interval.start
      
      while time_remaining?
        yield @remaining
      end
    ensure
      @interval.stop
      @interval = nil
    end
    
    private
    
    def time_remaining?
      @remaining = (@duration - @interval.duration)
    
      return @remaining > 0
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
timers-3.0.1 lib/timers/timeout.rb
timers-3.0.0 lib/timers/timeout.rb
timers-3.0.0.pre lib/timers/timeout.rb