Sha256: 46377fc7f3b733170856e1b8d0b7bbf47f8a1b25548de376252c0d18e45e729a

Contents?: true

Size: 1006 Bytes

Versions: 3

Compression:

Stored size: 1006 Bytes

Contents

require "thread_safe"

module Houston
  class Timer

    def initialize
      @queued_timers = ThreadSafe::Array.new

      Houston.observer.on "daemon:scheduler:start", raise: true do
        schedule_queued_timers!
      end
    end

    def at(time, &block)
      return schedule_later :at, time, block unless $scheduler

      days_of_the_week = :day
      days_of_the_week, time = *time if time.is_a?(Array)
      cronline = Whenever::Output::Cron.new(days_of_the_week, nil, time)
      $scheduler.cron cronline.time_in_cron_syntax, &block
    end

    def every(interval, &block)
      return schedule_later :every, interval, block unless $scheduler

      $scheduler.every interval, &block
    end

  private

    attr_reader :queued_timers

    def schedule_later(*args)
      queued_timers.push args
    end

    def schedule_queued_timers!
      while timer = queued_timers.pop
        method_name, value, block = timer
        public_send method_name, value, &block
      end
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
houston-core-0.8.0.pre lib/houston/boot/timer.rb
houston-core-0.7.0 lib/houston/boot/timer.rb
houston-core-0.7.0.beta4 lib/houston/boot/timer.rb