5 * A State\Data object contains a "message" (the primary result) and a
6 * data array (the persistent state). The message is transient, and does
7 * not move into the persistent state unless explicitly copied there.
9 class Data extends \ArrayObject
17 * @param string $message
20 public function __construct($message = '', $data = [])
22 $this->message = $message;
23 parent::__construct($data);
29 public function getData()
31 return $this->getArrayCopy();
37 public function getMessage()
39 return $this->message;
43 * @param string message
45 public function setMessage($message)
47 $this->message = $message;
51 * Merge another result into this result. Data already
52 * existing in this result takes precedence over the
53 * data in the Result being merged.
55 * @param \Robo\ResultData $result
59 public function merge(Data $result)
61 $mergedData = $this->getArrayCopy() + $result->getArrayCopy();
62 $this->exchangeArray($mergedData);
67 * Update the current data with the data provided in the parameter.
68 * Provided data takes precedence.
70 * @param \ArrayObject $update
74 public function update(\ArrayObject $update)
76 $iterator = $update->getIterator();
78 while ($iterator->valid()) {
79 $this[$iterator->key()] = $iterator->current();
87 * Merge another result into this result. Data already
88 * existing in this result takes precedence over the
89 * data in the Result being merged.
91 * $data['message'] is handled specially, and is appended
92 * to $this->message if set.
98 public function mergeData(array $data)
100 $mergedData = $this->getArrayCopy() + $data;
101 $this->exchangeArray($mergedData);
108 public function hasExecutionTime()
110 return isset($this['time']);
116 public function getExecutionTime()
118 if (!$this->hasExecutionTime()) {
121 return $this['time'];
125 * Accumulate execution time
127 public function accumulateExecutionTime($duration)
129 // Convert data arrays to scalar
130 if (is_array($duration)) {
131 $duration = isset($duration['time']) ? $duration['time'] : 0;
133 $this['time'] = $this->getExecutionTime() + $duration;
134 return $this->getExecutionTime();
138 * Accumulate the message.
140 public function accumulateMessage($message)
142 if (!empty($this->message)) {
143 $this->message .= "\n";
145 $this->message .= $message;
146 return $this->getMessage();