class Rufus::Job


The parent class for scheduled jobs.

def has_tag? (tag)


Returns true if this job sports the given tag
def has_tag? (tag)
  @tags.include?(tag)
end

def initialize (scheduler, job_id, params, &block)

def initialize (scheduler, job_id, params, &block)
  @scheduler = scheduler
  @block = block
  if job_id
    @job_id = job_id
  else
    JOB_ID_LOCK.synchronize do
      @job_id = @@last_given_id
      @@last_given_id = @job_id + 1
    end
  end
  @params = params
  #@tags = Array(tags).collect { |tag| tag.to_s }
    # making sure we have an array of String tags
  @tags = Array(params[:tags])
    # any tag is OK
end

def trigger


Triggers the job (in a dedicated thread).
def trigger
  Thread.new do
    @trigger_thread = Thread.current
      # keeping track of the thread
    begin
      do_trigger
    rescue Exception => e
      @scheduler.send(:log_exception, e)
    end
    #@trigger_thread = nil if @trigger_thread = Thread.current
    @trigger_thread = nil
      # overlapping executions, what to do ?
  end
  if trigger_thread_alive? and (to = @params[:timeout])
    @scheduler.in(to, :tags => 'timeout') do
      @trigger_thread.raise(Rufus::TimeOutError) if trigger_thread_alive?
    end
  end
end

def trigger_thread_alive?

def trigger_thread_alive?
  (@trigger_thread && @trigger_thread.alive?)
end

def unschedule


Removes (cancels) this job from its scheduler.
def unschedule
  @scheduler.unschedule(@job_id)
end