lib/elevate/task_definition.rb
module Elevate
class TaskDefinition
def initialize(name, options, &block)
@name = name
@options = options
@handlers = {}
instance_eval(&block)
end
attr_reader :name
attr_reader :handlers
attr_reader :options
def method_missing(method, *args, &block)
if method.to_s.start_with?("on_")
raise ArgumentError, "wrong number of arguments" unless args.empty?
raise ArgumentError, "block not supplied" unless block_given?
@handlers[method.to_sym] = block
else
super
end
end
def respond_to_missing?(method, include_private = false)
method.to_s.start_with?("on_") || super
end
def background(&block)
@handlers[:background] = block
end
def on_error(&block)
raise "on_error blocks must accept one parameter" unless block.arity == 1
@handlers[:on_error] = block
end
def on_finish(&block)
raise "on_finish blocks must accept two parameters" unless block.arity == 2
@handlers[:on_finish] = block
end
def on_start(&block)
raise "on_start blocks must accept zero parameters" unless block.arity == 0
@handlers[:on_start] = block
end
def on_update(&block)
@handlers[:on_update] = block
end
def timeout(seconds)
raise "timeout argument must be a number" unless seconds.is_a?(Numeric)
@options[:timeout_interval] = seconds
end
end
end