def call(args={})
      evaluate_command_definition(args)
      response = tasks.map do |task|

        response = task.call(args)

        # bail early if the task failed
        return response unless response.success?
        response
      end.last
    end
def call(args={})
      evaluate_command_definition(args)
      response = tasks.map do |task|

        response = task.call(args)

        # bail early if the task failed
        return response unless response.success?
        response
      end.last
    end
Invoke the command that has already been defined.

 This will run the command, processing any tasks defined by {#perform} and
 {#validate} in order, stopping execution if any of the tasks fails.
 Arguments passed in here will be merged with the provider options defined
 in each task.
 @param args [Hash] arguments to be passed to each task