Sha256: 0d2ddd657d9dcb317f7b70a5f2e5aa10556c4ca909c8726c622f1414b26a6c89

Contents?: true

Size: 1.07 KB

Versions: 9

Compression:

Stored size: 1.07 KB

Contents

module Workers
  class Timer
    include Workers::Helpers

    attr_reader :delay
    attr_reader :repeat

    def initialize(delay, options = {}, &block)
      @logger = Workers::LogProxy.new(options[:logger])
      @delay = delay
      @callback = options[:callback] || block
      @repeat = options[:repeat] || false
      @scheduler = options[:scheduler] || Workers.scheduler
      @mutex = Mutex.new

      reset
      @scheduler.schedule(self)

      return nil
    end

    def <=>(other)
      return sec_remaining <=> other.sec_remaining
    end

    def sec_remaining
      @mutex.synchronize do
        diff = @fire_at.to_f - Time.now.utc.to_f

        return (diff > 0) ? diff : 0
      end
    end

    def overdue?
        return sec_remaining <= 0
    end

    def fire
      @mutex.synchronize do
        @callback.call if @callback
      end

      return nil
    end

    def cancel
      @scheduler.unschedule(self)

      return nil
    end

    def reset
      @mutex.synchronize do
        @fire_at = Time.now.utc + @delay
      end

      return nil
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
workers-0.3.0 lib/workers/timer.rb
workers-0.2.2 lib/workers/timer.rb
workers-0.2.1 lib/workers/timer.rb
workers-0.2.0 lib/workers/timer.rb
workers-0.1.4 lib/workers/timer.rb
workers-0.1.3 lib/workers/timer.rb
workers-0.1.2 lib/workers/timer.rb
workers-0.1.1 lib/workers/timer.rb
workers-0.1.0 lib/workers/timer.rb