Skip to content

Commit

Permalink
Added request object to be available is RequestException.
Browse files Browse the repository at this point in the history
  • Loading branch information
arturdoruch committed Sep 27, 2015
1 parent f8c74f2 commit e39618d
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 8 deletions.
2 changes: 1 addition & 1 deletion Event/HttpErrorListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public function onComplete(CompleteEvent $event)
$code = (string) $event->getResponse()->getStatusCode();
// Throw an exception for an unsuccessful response
if ($code[0] >= 4 || $code[0] == 0) {
throw RequestException::create($event->getResponse());
throw RequestException::create($event->getResponse(), null, $event->getRequest());
}
}
}
43 changes: 36 additions & 7 deletions Exception/RequestException.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,40 @@

use ArturDoruch\Http\Curl\Codes;
use ArturDoruch\Http\Message\Response;
use ArturDoruch\Http\Request;

/**
* HTTP Request exception
*/
class RequestException extends \RuntimeException
{
/**
* @var Request
*/
private $request;

/**
* @var Response
*/
private $response;

public function __construct($message, Response $response, \Exception $previous = null)
public function __construct($message, Response $response, \Exception $previous = null, Request $request = null)
{
$this->response = $response;
$this->request = $request;
parent::__construct($message, $response->getStatusCode(), $previous);
}

/**
* Get the request that caused the exception
*
* @return Request
*/
public function getRequest()
{
return $this->request;
}

/**
* Get the associated response
*
Expand All @@ -34,6 +51,16 @@ public function getResponse()
return $this->response;
}

/**
* Check if request was set
*
* @return bool
*/
public function hasRequest()
{
return $this->request !== null;
}

/**
* @param Response $response
* @return string
Expand All @@ -56,15 +83,16 @@ public static function getErrorLabel(Response $response)
/**
* Factory method to create a new exception with a normalized error message
*
* @param Request $request
* @param Response $response Response received
* @param \Exception $previous Previous exception
* @param \Exception $previous Previous exception
*
* @return self
*/
public static function create(Response $response, \Exception $previous = null)
public static function create(Response $response, \Exception $previous = null, Request $request = null)
{
if (static::isConnectionError($response)) {
return static::createConnect($response, $previous);
return static::createConnect($response, $previous, $request);
}

$level = floor($response->getStatusCode() / 100);
Expand All @@ -87,24 +115,25 @@ public static function create(Response $response, \Exception $previous = null)
$message .= ' [error message] ' . $errorMsg;
}

return new $className($message, $response, $previous);
return new $className($message, $response, $previous, $request);
}

/**
* @param Request $request
* @param Response $response
* @param \Exception $previous
*
* @return ConnectException
*/
private static function createConnect(Response $response, \Exception $previous = null)
private static function createConnect(Response $response, \Exception $previous = null, Request $request = null)
{
$className = __NAMESPACE__ . '\\ConnectException';
$message = sprintf(
'Connection error [url] %s [error number] %d [error message] %s',
$response->getRequestUrl(), $response->getErrorNumber(), $response->getErrorMsg()
);

return new $className($message, $response, $previous);
return new $className($message, $response, $previous, $request);
}

/**
Expand Down

0 comments on commit e39618d

Please sign in to comment.