class PromisePool::Timer

Constants

Error

Attributes

block[RW]
error[RW]
timeout[RW]
timer[RW]

Public Class Methods

new(timeout, error=Error.new('execution expired')) click to toggle source
# File lib/promise_pool/timer.rb, line 36
def initialize timeout, error=Error.new('execution expired')
  self.timeout = timeout
  self.error   = error
end

Public Instance Methods

cancel() click to toggle source

should never raise!

# File lib/promise_pool/timer.rb, line 47
def cancel
  timer.cancel if timer
  self.block = nil
end
group() click to toggle source
# File lib/promise_pool/timer.rb, line 15
def group
  @group ||= @mutex.synchronize{ @group ||= group_new }
end
group_new() click to toggle source
# File lib/promise_pool/timer.rb, line 20
def group_new
  g = Timers::Group.new
  g.every(interval){}
  @thread = Thread.new do
    begin
      g.wait
    rescue => e
      warn "#{self.class}: ERROR: #{e}\n  from #{e.backtrace.inspect}"
    end while g.count > 1
    @group = nil
  end
  g
end
on_timeout(&block) click to toggle source
# File lib/promise_pool/timer.rb, line 41
def on_timeout &block
  self.block = block
  start
end
start() click to toggle source
# File lib/promise_pool/timer.rb, line 52
def start
  return if timeout.nil? || timeout.zero?
  self.timer = self.class.group.after(timeout){ block.call if block }
end