class Rufus::Scheduler::RepeatJob

Attributes

first_at[R]
last_at[R]
paused_at[R]
times[RW]

Public Class Methods

new(scheduler, duration, opts, block) click to toggle source
Calls superclass method Rufus::Scheduler::Job.new
# File lib/rufus/scheduler/jobs.rb, line 397
def initialize(scheduler, duration, opts, block)

  super

  @paused_at = nil

  @times = opts[:times]

  fail ArgumentError.new(
    "cannot accept :times => #{@times.inspect}, not nil or an int"
  ) unless @times == nil || @times.is_a?(Fixnum)

  self.first_at =
    opts[:first] || opts[:first_time] ||
    opts[:first_at] || opts[:first_in] ||
    nil
  self.last_at =
    opts[:last] || opts[:last_at] || opts[:last_in]
end

Public Instance Methods

determine_id() click to toggle source
# File lib/rufus/scheduler/jobs.rb, line 478
def determine_id

  [
    self.class.name.split(':').last.downcase[0..-4],
    @scheduled_at.to_f,
    self.hash.abs
  ].map(&:to_s).join('_')
end
first_at=(first) click to toggle source
# File lib/rufus/scheduler/jobs.rb, line 417
def first_at=(first)

  return (@first_at = nil) if first == nil

  n0 = Time.now
  n1 = n0 + 0.003

  first = n0 if first == :now || first == :immediately || first == 0

  @first_at = Rufus::Scheduler.parse_to_time(first)
  @first_at = n1 if @first_at >= n0 && @first_at < n1

  fail ArgumentError.new(
    "cannot set first[_at|_in] in the past: " +
    "#{first.inspect} -> #{@first_at.inspect}"
  ) if @first_at < n0

  @first_at
end
last_at=(last) click to toggle source
# File lib/rufus/scheduler/jobs.rb, line 437
def last_at=(last)

  @last_at = last ? Rufus::Scheduler.parse_to_time(last) : nil

  fail ArgumentError.new(
    "cannot set last[_at|_in] in the past: " +
    "#{last.inspect} -> #{@last_at.inspect}"
  ) if last && @last_at < Time.now

  @last_at
end
occurrences(time0, time1) click to toggle source
# File lib/rufus/scheduler/jobs.rb, line 487
def occurrences(time0, time1)

  a = []

  nt = @next_time
  ts = @times

  loop do

    break if nt > time1
    break if ts && ts <= 0

    a << nt if nt >= time0

    nt = next_time_from(nt)
    ts = ts - 1 if ts
  end

  a
end
pause() click to toggle source
# File lib/rufus/scheduler/jobs.rb, line 463
def pause

  @paused_at = Time.now
end
paused?() click to toggle source
# File lib/rufus/scheduler/jobs.rb, line 473
def paused?

  @paused_at != nil
end
resume() click to toggle source
# File lib/rufus/scheduler/jobs.rb, line 468
def resume

  @paused_at = nil
end
trigger(time) click to toggle source
Calls superclass method Rufus::Scheduler::Job#trigger
# File lib/rufus/scheduler/jobs.rb, line 449
def trigger(time)

  return if @paused_at

  return (@next_time = nil) if @times && @times < 1
  return (@next_time = nil) if @last_at && time >= @last_at
    #
    # TODO: rework that, jobs are thus kept 1 step too much in @jobs

  super

  @times -= 1 if @times
end