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