Sha256: 571c7bcd9e8f9581a10641d2020118a0d124aef293a1dbe35ef515161f1ab4a3

Contents?: true

Size: 1.75 KB

Versions: 11

Compression:

Stored size: 1.75 KB

Contents

module Sidetiq
  # Public: Recurrence schedule.
  class Schedule
    # :nodoc:
    attr_reader :last_occurrence

    # Public: Writer for backfilling option.
    attr_writer :backfill

    # Public: Start time offset from epoch used for calculating run
    # times in the Sidetiq schedules.
    START_TIME = Sidetiq.config.utc ? Time.utc(2010, 1, 1) : Time.local(2010, 1, 1)

    def initialize # :nodoc:
      @schedule = IceCube::Schedule.new(START_TIME)
    end

    def method_missing(meth, *args, &block) # :nodoc:
      if IceCube::Rule.respond_to?(meth)
        rule = IceCube::Rule.send(meth, *args, &block)
        @schedule.add_recurrence_rule(rule)
        rule
      elsif @schedule.respond_to?(meth)
        @schedule.send(meth, *args, &block)
      else
        super
      end
    end

    # Public: Checks if a job is due to be scheduled.
    #
    # Returns true if a job is due, otherwise false.
    def schedule_next?(time)
      next_occurrence = @schedule.next_occurrence(time)
      if @last_scheduled != next_occurrence
        @last_scheduled = next_occurrence
        return true
      end
      false
    end

    # Public: Schedule to String.
    #
    # Examples
    #
    #   class MyWorker
    #     include Sidekiq::Worker
    #     include Sidetiq::Schedulable
    #
    #     recurrence { daily }
    #
    #     def perform
    #     end
    #   end
    #
    #   Sidetiq.schedules[MyWorker].to_s
    #   # => "Daily"
    #
    # Returns a String representing the schedule.
    def to_s
      @schedule.to_s
    end

    # Public: Inquirer for backfilling option.
    def backfill?
      !!@backfill
    end

    # Internal: Set schedule options.
    def set_options(hash)
      self.backfill = hash[:backfill] if !hash[:backfill].nil?
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
sidetiq-0.5.0 lib/sidetiq/schedule.rb
sidetiq-0.4.3 lib/sidetiq/schedule.rb
sidetiq-0.4.2 lib/sidetiq/schedule.rb
sidetiq-0.4.1 lib/sidetiq/schedule.rb
sidetiq-0.4.0 lib/sidetiq/schedule.rb
sidetiq-0.4.0.rc4 lib/sidetiq/schedule.rb
sidetiq-0.4.0.rc3 lib/sidetiq/schedule.rb
sidetiq-0.4.0.rc2 lib/sidetiq/schedule.rb
sidetiq-0.4.0.rc1 lib/sidetiq/schedule.rb
sidetiq-0.3.7 lib/sidetiq/schedule.rb
sidetiq-0.3.6 lib/sidetiq/schedule.rb