class Einhorn::Event::Timer

Attributes

time[R]

Public Class Methods

new(time, start=nil, &blk) click to toggle source
# File lib/einhorn/event/timer.rb, line 5
def initialize(time, start=nil, &blk)
  @time = time
  @start = start || Time.now
  @blk = blk
end
open(*args, &blk) click to toggle source

TODO: abstract into some interface

# File lib/einhorn/event/timer.rb, line 12
def self.open(*args, &blk)
  instance = self.new(*args, &blk)
  instance.register!
  instance
end

Public Instance Methods

deregister!() click to toggle source
# File lib/einhorn/event/timer.rb, line 34
def deregister!
  Einhorn.log_debug("Nuking timer that expired #{Time.now - self.expires_at}s ago")
  Einhorn::Event.deregister_timer(self)
end
expires_at() click to toggle source
# File lib/einhorn/event/timer.rb, line 18
def expires_at
  @start + @time
end
register!() click to toggle source
# File lib/einhorn/event/timer.rb, line 29
def register!
  Einhorn.log_debug("Scheduling a new #{self.time}s timer")
  Einhorn::Event.register_timer(self)
end
ring!() click to toggle source
# File lib/einhorn/event/timer.rb, line 22
def ring!
  now = Time.now
  Einhorn.log_debug("Ringing timer that was scheduled #{now - @start}s ago and expired #{now - expires_at}s ago")
  deregister!
  @blk.call
end