Completed
Push — master ( f7424d...b53e51 )
by Alejandro
07:43
created

JsonErrorResponseGenerator   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 31
ccs 10
cts 10
cp 1
rs 10
c 1
b 0
f 0
wmc 4
lcom 0
cbo 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 11 3
A responsePhraseToCode() 0 4 1
1
<?php
2
namespace Shlinkio\Shlink\Rest\ErrorHandler;
3
4
use Acelaya\ExpressiveErrorHandler\ErrorHandler\ErrorResponseGeneratorInterface;
5
use Fig\Http\Message\StatusCodeInterface;
6
use Psr\Http\Message\ResponseInterface as Response;
7
use Psr\Http\Message\ServerRequestInterface as Request;
8
use Zend\Diactoros\Response\JsonResponse;
9
use Zend\Expressive\Router\RouteResult;
10
11
class JsonErrorResponseGenerator implements ErrorResponseGeneratorInterface, StatusCodeInterface
12
{
13
    /**
14
     * Final handler for an application.
15
     *
16
     * @param \Throwable|\Exception $e
17
     * @param Request $request
18
     * @param Response $response
19
     * @return Response
20
     */
21 2
    public function __invoke($e, Request $request, Response $response)
22
    {
23 2
        $status = $response->getStatusCode();
24 2
        $responsePhrase = $status < 400 ? 'Internal Server Error' : $response->getReasonPhrase();
25 2
        $status = $status < 400 ? self::STATUS_INTERNAL_SERVER_ERROR : $status;
26
27 2
        return new JsonResponse([
28 2
            'error' => $this->responsePhraseToCode($responsePhrase),
29 2
            'message' => $responsePhrase,
30 2
        ], $status);
31
    }
32
33
    /**
34
     * @param string $responsePhrase
35
     * @return string
36
     */
37 2
    protected function responsePhraseToCode($responsePhrase)
38
    {
39 2
        return strtoupper(str_replace(' ', '_', $responsePhrase));
40
    }
41
}
42