Passed
Push — master ( 1f415b...b977eb )
by Dāvis
03:55
created

MessageFormatter::format()   D

Complexity

Conditions 33
Paths 1

Size

Total Lines 84
Code Lines 73

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 33
eloc 73
nc 1
nop 3
dl 0
loc 84
rs 4.7628
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Sludio\HelperBundle\Guzzle\GuzzleHttp;
4
5
use GuzzleHttp\MessageFormatter as BaseMessageFormatter;
6
use Psr\Http\Message\MessageInterface;
7
use Psr\Http\Message\RequestInterface;
8
use Psr\Http\Message\ResponseInterface;
9
10
class MessageFormatter extends BaseMessageFormatter
11
{
12
    /**
13
     * {@inheritdoc}
14
     */
15
    public function format(RequestInterface $request, ResponseInterface $response = null, $error = null)
16
    {
17
        $cache = [];
18
19
        return preg_replace_callback('/{\s*([A-Za-z_\-\.0-9]+)\s*}/', function (array $matches) use ($request, $response, $error, &$cache) {
20
21
            if (isset($cache[$matches[1]])) {
22
                return $cache[$matches[1]];
23
            }
24
25
            $result = '';
26
            switch ($matches[1]) {
27
                case 'request':
28
                    $result = Psr7\str($request);
29
                    break;
30
                case 'response':
31
                    $result = $response ? Psr7\str($response) : '';
32
                    break;
33
                case 'req_headers':
34
                    $result = trim($request->getMethod().' '.$request->getRequestTarget()).' HTTP/'.$request->getProtocolVersion()."\r\n".$this->headers($request);
35
                    break;
36
                case 'res_headers':
37
                    $result = $response ? sprintf('HTTP/%s %d %s', $response->getProtocolVersion(), $response->getStatusCode(), $response->getReasonPhrase())."\r\n".$this->headers($response) : 'NULL';
38
                    break;
39
                case 'req_body':
40
                    $result = $request->getBody();
41
                    break;
42
                case 'res_body':
43
                    $result = $response ? $response->getBody() : 'NULL';
44
                    break;
45
                case 'ts':
46
                case 'date_iso_8601':
47
                    $result = gmdate('c');
48
                    break;
49
                case 'date_common_log':
50
                    $result = date('d/M/Y:H:i:s O');
51
                    break;
52
                case 'method':
53
                    $result = $request->getMethod();
54
                    break;
55
                case 'version':
56
                    $result = $request->getProtocolVersion();
57
                    break;
58
                case 'uri':
59
                case 'url':
60
                    $result = $request->getUri();
61
                    break;
62
                case 'target':
63
                    $result = $request->getRequestTarget();
64
                    break;
65
                case 'req_version':
66
                    $result = $request->getProtocolVersion();
67
                    break;
68
                case 'res_version':
69
                    $result = $response ? $response->getProtocolVersion() : 'NULL';
70
                    break;
71
                case 'host':
72
                    $result = $request->getHeaderLine('Host');
73
                    break;
74
                case 'hostname':
75
                    $result = gethostname();
76
                    break;
77
                case 'code':
78
                    $result = $response ? $response->getStatusCode() : 'NULL';
79
                    break;
80
                case 'phrase':
81
                    $result = $response ? $response->getReasonPhrase() : 'NULL';
82
                    break;
83
                case 'error':
84
                    $result = $error ? $error->getMessage() : 'NULL';
85
                    break;
86
                default:
87
                    // handle prefixed dynamic headers
88
                    if (strpos($matches[1], 'req_header_') === 0) {
89
                        $result = $request->getHeaderLine(substr($matches[1], 11));
90
                    } elseif (strpos($matches[1], 'res_header_') === 0) {
91
                        $result = $response ? $response->getHeaderLine(substr($matches[1], 11)) : 'NULL';
92
                    }
93
            }
94
95
            $cache[$matches[1]] = $result;
96
97
            return $result;
98
        }, $this->template);
0 ignored issues
show
Bug introduced by
The property template is declared private in GuzzleHttp\MessageFormatter and cannot be accessed from this context.
Loading history...
99
    }
100
}