diff options
Diffstat (limited to 'vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse')
4 files changed, 128 insertions, 0 deletions
diff --git a/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/ErrorResponseExceptionInterface.php b/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/ErrorResponseExceptionInterface.php new file mode 100644 index 0000000..5dce8bd --- /dev/null +++ b/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/ErrorResponseExceptionInterface.php @@ -0,0 +1,22 @@ +<?php + +namespace Guzzle\Plugin\ErrorResponse; + +use Guzzle\Service\Command\CommandInterface; +use Guzzle\Http\Message\Response; + +/** + * Interface used to create an exception from an error response + */ +interface ErrorResponseExceptionInterface +{ + /** + * Create an exception for a command based on a command and an error response definition + * + * @param CommandInterface $command Command that was sent + * @param Response $response The error response + * + * @return self + */ + public static function fromCommand(CommandInterface $command, Response $response); +} diff --git a/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php b/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php new file mode 100644 index 0000000..588b9c3 --- /dev/null +++ b/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php @@ -0,0 +1,72 @@ +<?php + +namespace Guzzle\Plugin\ErrorResponse; + +use Guzzle\Common\Event; +use Guzzle\Http\Message\RequestInterface; +use Guzzle\Service\Command\CommandInterface; +use Guzzle\Service\Description\Operation; +use Guzzle\Plugin\ErrorResponse\Exception\ErrorResponseException; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +/** + * Converts generic Guzzle response exceptions into errorResponse exceptions + */ +class ErrorResponsePlugin implements EventSubscriberInterface +{ + public static function getSubscribedEvents() + { + return array('command.before_send' => array('onCommandBeforeSend', -1)); + } + + /** + * Adds a listener to requests before they sent from a command + * + * @param Event $event Event emitted + */ + public function onCommandBeforeSend(Event $event) + { + $command = $event['command']; + if ($operation = $command->getOperation()) { + if ($operation->getErrorResponses()) { + $request = $command->getRequest(); + $request->getEventDispatcher() + ->addListener('request.complete', $this->getErrorClosure($request, $command, $operation)); + } + } + } + + /** + * @param RequestInterface $request Request that received an error + * @param CommandInterface $command Command that created the request + * @param Operation $operation Operation that defines the request and errors + * + * @return \Closure Returns a closure + * @throws ErrorResponseException + */ + protected function getErrorClosure(RequestInterface $request, CommandInterface $command, Operation $operation) + { + return function (Event $event) use ($request, $command, $operation) { + $response = $event['response']; + foreach ($operation->getErrorResponses() as $error) { + if (!isset($error['class'])) { + continue; + } + if (isset($error['code']) && $response->getStatusCode() != $error['code']) { + continue; + } + if (isset($error['reason']) && $response->getReasonPhrase() != $error['reason']) { + continue; + } + $className = $error['class']; + $errorClassInterface = __NAMESPACE__ . '\\ErrorResponseExceptionInterface'; + if (!class_exists($className)) { + throw new ErrorResponseException("{$className} does not exist"); + } elseif (!(in_array($errorClassInterface, class_implements($className)))) { + throw new ErrorResponseException("{$className} must implement {$errorClassInterface}"); + } + throw $className::fromCommand($command, $response); + } + }; + } +} diff --git a/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/Exception/ErrorResponseException.php b/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/Exception/ErrorResponseException.php new file mode 100644 index 0000000..1d89e40 --- /dev/null +++ b/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/Exception/ErrorResponseException.php @@ -0,0 +1,7 @@ +<?php + +namespace Guzzle\Plugin\ErrorResponse\Exception; + +use Guzzle\Common\Exception\RuntimeException; + +class ErrorResponseException extends RuntimeException {} diff --git a/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/composer.json b/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/composer.json new file mode 100644 index 0000000..607e861 --- /dev/null +++ b/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/composer.json @@ -0,0 +1,27 @@ +{ + "name": "guzzle/plugin-error-response", + "description": "Guzzle errorResponse plugin for creating error exceptions based on a service description", + "homepage": "http://guzzlephp.org/", + "keywords": ["plugin", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/service": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\ErrorResponse": "" } + }, + "target-dir": "Guzzle/Plugin/ErrorResponse", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} |