class Rufus::Scheduler::RepeatJob

def determine_id

def determine_id
  [
    self.class.name.split(':').last.downcase[0..-4],
    @scheduled_at.to_f,
    self.hash.abs
  ].map(&:to_s).join('_')
end

def first_at=(first)

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

def initialize(scheduler, duration, opts, block)

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

def last_at=(last)

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

def occurrences(time0, time1)

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

def pause

def pause
  @paused_at = Time.now
end

def paused?

def paused?
  @paused_at != nil
end

def resume

def resume
  @paused_at = nil
end

def trigger(time)

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