mirror of
https://github.com/SociallyDev/Spaces-API.git
synced 2025-08-14 02:27:23 -07:00
spaces.php
This commit is contained in:
parent
7755490b81
commit
eefa32741e
845 changed files with 50409 additions and 0 deletions
152
aws/Aws/History.php
Normal file
152
aws/Aws/History.php
Normal file
|
@ -0,0 +1,152 @@
|
|||
<?php
|
||||
namespace Aws;
|
||||
|
||||
use Psr\Http\Message\RequestInterface;
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents a history container that is required when using the history
|
||||
* middleware.
|
||||
*/
|
||||
class History implements \Countable, \IteratorAggregate
|
||||
{
|
||||
private $maxEntries;
|
||||
private $entries = array();
|
||||
|
||||
/**
|
||||
* @param int $maxEntries Maximum number of entries to store.
|
||||
*/
|
||||
public function __construct($maxEntries = 10)
|
||||
{
|
||||
$this->maxEntries = $maxEntries;
|
||||
}
|
||||
|
||||
public function count()
|
||||
{
|
||||
return count($this->entries);
|
||||
}
|
||||
|
||||
public function getIterator()
|
||||
{
|
||||
return new \ArrayIterator(array_values($this->entries));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the last finished command seen by the history container.
|
||||
*
|
||||
* @return CommandInterface
|
||||
* @throws \LogicException if no commands have been seen.
|
||||
*/
|
||||
public function getLastCommand()
|
||||
{
|
||||
if (!$this->entries) {
|
||||
throw new \LogicException('No commands received');
|
||||
}
|
||||
|
||||
return end($this->entries)['command'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the last finished request seen by the history container.
|
||||
*
|
||||
* @return RequestInterface
|
||||
* @throws \LogicException if no requests have been seen.
|
||||
*/
|
||||
public function getLastRequest()
|
||||
{
|
||||
if (!$this->entries) {
|
||||
throw new \LogicException('No requests received');
|
||||
}
|
||||
|
||||
return end($this->entries)['request'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the last received result or exception.
|
||||
*
|
||||
* @return ResultInterface|AwsException
|
||||
* @throws \LogicException if no return values have been received.
|
||||
*/
|
||||
public function getLastReturn()
|
||||
{
|
||||
if (!$this->entries) {
|
||||
throw new \LogicException('No entries');
|
||||
}
|
||||
|
||||
$last = end($this->entries);
|
||||
|
||||
if (isset($last['result'])) {
|
||||
return $last['result'];
|
||||
} elseif (isset($last['exception'])) {
|
||||
return $last['exception'];
|
||||
} else {
|
||||
throw new \LogicException('No return value for last entry.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiate an entry being added to the history.
|
||||
*
|
||||
* @param CommandInterface $cmd Command be executed.
|
||||
* @param RequestInterface $req Request being sent.
|
||||
*
|
||||
* @return string Returns the ticket used to finish the entry.
|
||||
*/
|
||||
public function start(CommandInterface $cmd, RequestInterface $req)
|
||||
{
|
||||
$ticket = uniqid();
|
||||
$this->entries[$ticket] = [
|
||||
'command' => $cmd,
|
||||
'request' => $req,
|
||||
'result' => null,
|
||||
'exception' => null,
|
||||
];
|
||||
|
||||
return $ticket;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finish adding an entry to the history container.
|
||||
*
|
||||
* @param string $ticket Ticket returned from the start call.
|
||||
* @param mixed $result The result (an exception or AwsResult).
|
||||
*/
|
||||
public function finish($ticket, $result)
|
||||
{
|
||||
if (!isset($this->entries[$ticket])) {
|
||||
throw new \InvalidArgumentException('Invalid history ticket');
|
||||
} elseif (isset($this->entries[$ticket]['result'])
|
||||
|| isset($this->entries[$ticket]['exception'])
|
||||
) {
|
||||
throw new \LogicException('History entry is already finished');
|
||||
}
|
||||
|
||||
if ($result instanceof \Exception) {
|
||||
$this->entries[$ticket]['exception'] = $result;
|
||||
} else {
|
||||
$this->entries[$ticket]['result'] = $result;
|
||||
}
|
||||
|
||||
if (count($this->entries) >= $this->maxEntries) {
|
||||
$this->entries = array_slice($this->entries, -$this->maxEntries, null, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush the history
|
||||
*/
|
||||
public function clear()
|
||||
{
|
||||
$this->entries = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the history to an array.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function toArray()
|
||||
{
|
||||
return array_values($this->entries);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue