RequestException   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Test Coverage

Coverage 93.75%

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 16
c 3
b 0
f 0
dl 0
loc 39
rs 10
ccs 15
cts 16
cp 0.9375
wmc 4

1 Method

Rating   Name   Duplication   Size   Complexity  
A create() 0 27 4
1
<?php
2
3
/*
4
 * This file is part of Guzzle HTTP JSON-RPC
5
 *
6
 * Copyright (c) 2014 Nature Delivered Ltd. <http://graze.com>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 *
11
 * @see  http://github.com/graze/guzzle-jsonrpc/blob/master/LICENSE
12
 * @link http://github.com/graze/guzzle-jsonrpc
13
 */
14
15
namespace Graze\GuzzleHttp\JsonRpc\Exception;
16
17
use Exception;
18
use Graze\GuzzleHttp\JsonRpc\Message\RequestInterface;
19
use Graze\GuzzleHttp\JsonRpc\Message\ResponseInterface;
20
use GuzzleHttp\Exception\RequestException as HttpRequestException;
21
use Psr\Http\Message\RequestInterface as HttpRequestInterface;
22
use Psr\Http\Message\ResponseInterface as HttpResponseInterface;
23
24
class RequestException extends HttpRequestException
25
{
26
    /**
27
     * {@inheritdoc}
28
     *
29
     * @param HttpRequestInterface       $request        Request
30
     * @param HttpResponseInterface|null $response       Response received
31
     * @param \Exception|null            $previous       Previous exception
32
     * @param array|null                 $handlerContext Optional handler context.
33
     *
34
     * @return HttpRequestException
35
     */
36 10
    public static function create(
37
        HttpRequestInterface $request,
38
        HttpResponseInterface $response = null,
39
        Exception $previous = null,
40
        array $handlerContext = null
41
    ) {
42 10
        if ($request instanceof RequestInterface && $response instanceof ResponseInterface) {
43 10
            static $clientErrorCodes = [-32600, -32601, -32602, -32700];
44
45 10
            $errorCode = $response->getRpcErrorCode();
46 10
            if (in_array($errorCode, $clientErrorCodes)) {
47 5
                $label = 'Client RPC error response';
48 5
                $className = ClientException::class;
49 5
            } else {
50 5
                $label = 'Server RPC error response';
51 5
                $className = ServerException::class;
52
            }
53
54 10
            $message = $label . ' [uri] ' . $request->getRequestTarget()
55 10
                . ' [method] ' . $request->getRpcMethod()
56 10
                . ' [error code] ' . $errorCode
57 10
                . ' [error message] ' . $response->getRpcErrorMessage();
58
59 10
            return new $className($message, $request, $response, $previous);
60
        }
61
62
        return parent::create($request, $response, $previous);
63
    }
64
}
65