class Clockwork::Event

Attributes

job[RW]
last[RW]

Public Class Methods

new(manager, period, job, block, options={}) click to toggle source
# File lib/clockwork/event.rb, line 5
def initialize(manager, period, job, block, options={})
  validate_if_option(options[:if])
  @manager = manager
  @period = period
  @job = job
  @at = At.parse(options[:at])
  @block = block
  @if = options[:if]
  @thread = options.fetch(:thread, @manager.config[:thread])
  @timezone = options.fetch(:tz, @manager.config[:tz])
  @skip_first_run = options[:skip_first_run]
  @last = @skip_first_run ? convert_timezone(Time.now) : nil
end

Public Instance Methods

convert_timezone(t) click to toggle source
# File lib/clockwork/event.rb, line 19
def convert_timezone(t)
  @timezone ? t.in_time_zone(@timezone) : t
end
run(t) click to toggle source
# File lib/clockwork/event.rb, line 35
def run(t)
  @manager.log "Triggering '#{self}'"
  @last = convert_timezone(t)
  if thread?
    if @manager.thread_available?
      t = Thread.new do
        execute
      end
      t['creator'] = @manager
    else
      @manager.log_error "Threads exhausted; skipping #{self}"
    end
  else
    execute
  end
end
run_now?(t) click to toggle source
# File lib/clockwork/event.rb, line 23
def run_now?(t)
  t = convert_timezone(t)
  return false unless elapsed_ready?(t)
  return false unless run_at?(t)
  return false unless run_if?(t)
  true
end
thread?() click to toggle source
# File lib/clockwork/event.rb, line 31
def thread?
  @thread
end
to_s() click to toggle source
# File lib/clockwork/event.rb, line 52
def to_s
  job.to_s
end

Private Instance Methods

elapsed_ready?(t) click to toggle source
# File lib/clockwork/event.rb, line 64
def elapsed_ready?(t)
  @last.nil? || (t - @last.to_i).to_i >= @period
end
execute() click to toggle source
# File lib/clockwork/event.rb, line 57
def execute
  @block.call(@job, @last)
rescue => e
  @manager.log_error e
  @manager.handle_error e
end
run_at?(t) click to toggle source
# File lib/clockwork/event.rb, line 68
def run_at?(t)
  @at.nil? || @at.ready?(t)
end
run_if?(t) click to toggle source
# File lib/clockwork/event.rb, line 72
def run_if?(t)
  @if.nil? || @if.call(t)
end
validate_if_option(if_option) click to toggle source
# File lib/clockwork/event.rb, line 76
def validate_if_option(if_option)
  if if_option && !if_option.respond_to?(:call)
    raise ArgumentError.new(':if expects a callable object, but #{if_option} does not respond to call')
  end
end