151 lines
5.4 KiB
PHP
151 lines
5.4 KiB
PHP
<?php
|
|
namespace Robo\Collection;
|
|
|
|
use Psr\Log\LogLevel;
|
|
use Robo\Contract\TaskInterface;
|
|
|
|
interface CollectionInterface extends NestedCollectionInterface
|
|
{
|
|
/**
|
|
* Unnamed tasks are assigned an arbitrary numeric index
|
|
* in the task list. Any numeric value may be used, but the
|
|
* UNNAMEDTASK constant is recommended for clarity.
|
|
*
|
|
* @var int
|
|
*/
|
|
const UNNAMEDTASK = 0;
|
|
|
|
/**
|
|
* Add a task or a list of tasks to our task collection. Each task
|
|
* will run via its 'run()' method once (and if) all of the tasks
|
|
* added before it complete successfully. If the task also implements
|
|
* RollbackInterface, then it will be rolled back via its 'rollback()'
|
|
* method ONLY if its 'run()' method completes successfully, and some
|
|
* task added after it fails.
|
|
*
|
|
* @param TaskInterface $task
|
|
* The task to add to our collection.
|
|
* @param int|string $name
|
|
* An optional name for the task -- missing or UNNAMEDTASK for unnamed tasks.
|
|
* Names are used for positioning before and after tasks.
|
|
*
|
|
* @return CollectionInterface
|
|
*/
|
|
public function add(TaskInterface $task, $name = self::UNNAMEDTASK);
|
|
|
|
/**
|
|
* Add arbitrary code to execute as a task.
|
|
*
|
|
* @param callable $code Code to execute as a task
|
|
* @param int|string $name
|
|
* An optional name for the task -- missing or UNNAMEDTASK for unnamed tasks.
|
|
* Names are used for positioning before and after tasks.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function addCode(callable $code, $name = self::UNNAMEDTASK);
|
|
|
|
/**
|
|
* Add arbitrary code that will be called once for every item in the
|
|
* provided array or iterable object. If the function result of the
|
|
* provided callback is a TaskInterface or Collection, then it will be
|
|
* executed.
|
|
*
|
|
* @param CollectionInterface|array $iterable A collection of things to iterate
|
|
* @param $code $code A callback function to call for each item in the collection.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function addIterable($iterable, callable $code);
|
|
|
|
/**
|
|
* Add a rollback task to our task collection. A rollback task
|
|
* will execute ONLY if all of the tasks added before it complete
|
|
* successfully, AND some task added after it fails.
|
|
*
|
|
* @param TaskInterface $rollbackTask
|
|
* The rollback task to add. Note that the 'run()' method of the
|
|
* task executes, not its 'rollback()' method. To use the 'rollback()'
|
|
* method, add the task via 'Collection::add()' instead.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function rollback(TaskInterface $rollbackTask);
|
|
|
|
/**
|
|
* Add arbitrary code to execute as a rollback.
|
|
*
|
|
* @param callable $rollbackTask Code to execute during rollback processing
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function rollbackCode(callable $rollbackTask);
|
|
|
|
/**
|
|
* Add a completion task to our task collection. A completion task
|
|
* will execute EITHER after all tasks succeed, OR immediatley after
|
|
* any task fails. Completion tasks never cause errors to be returned
|
|
* from Collection::run(), even if they fail.
|
|
*
|
|
* @param TaskInterface $completionTask
|
|
* The completion task to add. Note that the 'run()' method of the
|
|
* task executes, just as if the task was added normally.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function completion(TaskInterface $completionTask);
|
|
|
|
/**
|
|
* Add arbitrary code to execute as a completion.
|
|
*
|
|
* @param callable $completionTask Code to execute after collection completes
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function completionCode(callable $completionTask);
|
|
|
|
/**
|
|
* Add a task before an existing named task.
|
|
*
|
|
* @param string $name
|
|
* The name of the task to insert before. The named task MUST exist.
|
|
* @param callable|TaskInterface $task
|
|
* The task to add.
|
|
* @param int|string $nameOfTaskToAdd
|
|
* The name of the task to add. If not provided, will be associated
|
|
* with the named task it was added before.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function before($name, $task, $nameOfTaskToAdd = self::UNNAMEDTASK);
|
|
|
|
/**
|
|
* Add a task after an existing named task.
|
|
*
|
|
* @param string $name
|
|
* The name of the task to insert before. The named task MUST exist.
|
|
* @param callable|TaskInterface $task
|
|
* The task to add.
|
|
* @param int|string $nameOfTaskToAdd
|
|
* The name of the task to add. If not provided, will be associated
|
|
* with the named task it was added after.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function after($name, $task, $nameOfTaskToAdd = self::UNNAMEDTASK);
|
|
|
|
/**
|
|
* Print a progress message after Collection::run() has executed
|
|
* all of the tasks that were added prior to the point when this
|
|
* method was called. If one of the previous tasks fail, then this
|
|
* message will not be printed.
|
|
*
|
|
* @param string $text Message to print.
|
|
* @param array $context Extra context data for use by the logger. Note
|
|
* that the data from the collection state is merged with the provided context.
|
|
* @param \Psr\Log\LogLevel|string $level The log level to print the information at. Default is NOTICE.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function progressMessage($text, $context = [], $level = LogLevel::NOTICE);
|
|
}
|