GuzzleAdapter::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
namespace EasyHttp\GuzzleLayer;
4
5
use EasyHttp\LayerContracts\Contracts\HttpClientAdapter;
6
use EasyHttp\LayerContracts\Contracts\HttpClientRequest;
7
use EasyHttp\LayerContracts\Contracts\HttpClientResponse;
8
use EasyHttp\LayerContracts\Exceptions\HttpClientException;
9
use EasyHttp\LayerContracts\Exceptions\HttpConnectionException;
10
use GuzzleHttp\ClientInterface;
11
use GuzzleHttp\Exception\ConnectException;
12
use GuzzleHttp\Exception\RequestException;
13
use GuzzleHttp\Exception\TransferException;
14
15
class GuzzleAdapter implements HttpClientAdapter
16
{
17
    protected ClientInterface $client;
18
19 23
    public function __construct(ClientInterface $client)
20
    {
21 23
        $this->client = $client;
22
    }
23
24 23
    public function request(HttpClientRequest $request): HttpClientResponse
25
    {
26
        try {
27 23
            $response = $this->client->request(
28 23
                $request->getMethod(),
29 23
                $request->getUri(),
30 23
                $this->buildOptions($request)
31 23
            );
32 9
        } catch (ConnectException $exception) {
33 1
            throw new HttpConnectionException($exception->getMessage(), (int) $exception->getCode(), $exception);
34 8
        } catch (RequestException $exception) {
35 7
            if (! $exception->hasResponse()) {
36 5
                throw new HttpClientException($exception->getMessage(), (int) $exception->getCode(), $exception);
37
            }
38
39 2
            $response = $exception->getResponse();
40 1
        } catch (TransferException $exception) {
41 1
            throw new HttpClientException($exception->getMessage(), (int) $exception->getCode(), $exception);
42
        }
43
44 16
        return new GuzzleResponse($response);
45
    }
46
47 23
    private function buildOptions(HttpClientRequest $request): array
48
    {
49 23
        $options = [
50 23
            'timeout' => $request->getTimeout(),
51 23
            'verify' => $request->isSSL()
52 23
        ];
53
54 23
        $this
55 23
            ->setHeaders($request, $options)
56 23
            ->setJson($request, $options)
57 23
            ->setQuery($request, $options)
58 23
            ->setUrlEncodedData($request, $options)
59 23
            ->setSecurityContext($request, $options)
60 23
            ->setBasicAuth($request, $options);
61
62 23
        return $options;
63
    }
64
65 23
    private function setHeaders(HttpClientRequest $request, &$options): self
66
    {
67 23
        $headers = [];
68
69 23
        if ($request->hasHeaders()) {
70 2
            $headers = $request->getHeaders();
71
        }
72
73 23
        if ($request->hasServerCookies()) {
0 ignored issues
show
Bug introduced by
The method hasServerCookies() does not exist on EasyHttp\LayerContracts\...racts\HttpClientRequest. It seems like you code against a sub-type of EasyHttp\LayerContracts\...racts\HttpClientRequest such as EasyHttp\GuzzleLayer\GuzzleRequest. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

73
        if ($request->/** @scrutinizer ignore-call */ hasServerCookies()) {
Loading history...
74 1
            $headers['Set-Cookie'] = $request->getServerCookies();
0 ignored issues
show
Bug introduced by
The method getServerCookies() does not exist on EasyHttp\LayerContracts\...racts\HttpClientRequest. It seems like you code against a sub-type of EasyHttp\LayerContracts\...racts\HttpClientRequest such as EasyHttp\GuzzleLayer\GuzzleRequest. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

74
            /** @scrutinizer ignore-call */ 
75
            $headers['Set-Cookie'] = $request->getServerCookies();
Loading history...
75
        }
76
77 23
        if (!empty($headers)) {
78 3
            $options['headers'] = $headers;
79
        }
80
81 23
        return $this;
82
    }
83
84 23
    private function setJson(HttpClientRequest $request, &$options): self
85
    {
86 23
        if ($request->hasJson()) {
87 3
            $options['json'] = $request->getJson();
88
        }
89
90 23
        return $this;
91
    }
92
93 23
    private function setQuery(HttpClientRequest $request, &$options): self
94
    {
95 23
        if ($request->hasQuery()) {
96 3
            $options['query'] = $request->getQuery();
97
        }
98
99 23
        return $this;
100
    }
101
102 23
    private function setSecurityContext(HttpClientRequest $request, &$options): self
103
    {
104 23
        if ($request->hasSecurityContext() && $request->getSecurityContext()->hasCertificate()) {
105 3
            $options['cert'] = $request->getSecurityContext()->getCertificate();
106
        }
107
108 23
        if ($request->hasSecurityContext() && $request->getSecurityContext()->hasPrivateKey()) {
109 2
            $options['ssl_key'] = $request->getSecurityContext()->getPrivateKey();
110
        }
111
112 23
        return $this;
113
    }
114
115 23
    private function setBasicAuth(HttpClientRequest $request, &$options): self
116
    {
117 23
        if (count($request->getBasicAuth())) {
118 2
            $options['auth'] = $request->getBasicAuth();
119
        }
120
121 23
        return $this;
122
    }
123
124 23
    private function setUrlEncodedData(HttpClientRequest $request, array &$options): self
125
    {
126 23
        if ($request->hasUrlEncodedData()) {
0 ignored issues
show
Bug introduced by
The method hasUrlEncodedData() does not exist on EasyHttp\LayerContracts\...racts\HttpClientRequest. It seems like you code against a sub-type of EasyHttp\LayerContracts\...racts\HttpClientRequest such as EasyHttp\GuzzleLayer\GuzzleRequest. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

126
        if ($request->/** @scrutinizer ignore-call */ hasUrlEncodedData()) {
Loading history...
127 1
            $options['form_params'] = $request->getUrlEncodedData();
0 ignored issues
show
Bug introduced by
The method getUrlEncodedData() does not exist on EasyHttp\LayerContracts\...racts\HttpClientRequest. It seems like you code against a sub-type of EasyHttp\LayerContracts\...racts\HttpClientRequest such as EasyHttp\GuzzleLayer\GuzzleRequest. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

127
            /** @scrutinizer ignore-call */ 
128
            $options['form_params'] = $request->getUrlEncodedData();
Loading history...
128
        }
129
130 23
        return $this;
131
    }
132
}
133