def task(name, options = {})
      options[:is] = options[:is].is_a?(Array) ? options[:is] : [options[:is]].compact
      @tasks[name] = Task.new(name,options)
    end
def task(name, options = {})
      options[:is] = options[:is].is_a?(Array) ? options[:is] : [options[:is]].compact
      @tasks[name] = Task.new(name,options)
    end
Define a new task.

 @example Define an entirely new task
 task :push

 @example Define a publish task
 task :publish, :is => :update, :if => only_changed(:published)

 @example Define a joined manage task
 task :manage, :is => [:update, :create, :delete]

 @see #can More examples for the :if option
 @see DEFAULT_TASKS Default tasks

 @param [Symbol] name The name of the task.
 @param [Hash] options
 @option options [Symbol, Array<Symbol>] :is Optional parent tasks. The options of the parents will be inherited.
 @option options [String, Hash, Array<String,Hash>] :if The conditions for this task.