class Timers::Timer

An individual timer set to fire a given proc at a given time

def <=>(other)

def <=>(other)
  @offset <=> other.offset
end

def cancel

Cancel this timer
def cancel
  @timers.cancel self
end

def continue

Continue this timer
def continue
  @timers.continue self
end

def delay(seconds)

Extend this timer
def delay(seconds)
  @timers.delete self
  @offset += seconds
  @timers.add self
end

def fire(offset = @timers.current_offset)

Fire the block
def fire(offset = @timers.current_offset)
  reset(offset) if recurring
  @block.call
end

def initialize(timers, interval, recurring = false, &block)

def initialize(timers, interval, recurring = false, &block)
  @timers, @interval, @recurring = timers, interval, recurring
  @block  = block
  @offset = nil
  reset
end

def inspect

Inspect a timer
def inspect
  str = "#<Timers::Timer:#{object_id.to_s(16)} "
  offset = @timers.current_offset
  if @offset
    if @offset >= offset
      str << "fires in #{@offset - offset} seconds"
    else
      str << "fired #{offset - @offset} seconds ago"
    end
    str << ", recurs every #{interval}" if recurring
  else
    str << "dead"
  end
  str << ">"
end

def pause

Pause this timer
def pause
  @timers.pause self
end

def reset(offset = @timers.current_offset)

Reset this timer
def reset(offset = @timers.current_offset)
  @timers.cancel self if @time
  @offset = Float(offset) + @interval
  @timers.add self
end