Completed
Push — master ( 88b9f7...c044d2 )
by Pol
15:00
created

AbstractClient   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 3
dl 0
loc 71
ccs 12
cts 12
cp 1
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A getHttpClient() 0 4 1
A getMessageFactory() 0 4 1
A sendRequest() 0 4 1
A withHttpClient() 0 7 1
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace drupol\Yaroc\Http;
6
7
use Http\Client\HttpClient;
8
use Http\Discovery\HttpClientDiscovery;
9
use Http\Discovery\MessageFactoryDiscovery;
10
use Http\Message\MessageFactory;
11
use Psr\Http\Message\RequestInterface;
12
use Psr\Http\Message\ResponseInterface;
13
14
/**
15
 * Class AbstractClient.
16
 */
17
abstract class AbstractClient implements HttpClient
18
{
19
    /**
20
     * The HTTP client.
21
     *
22
     * @var \Http\Client\HttpClient
23
     */
24
    private $httpClient;
25
26
    /**
27
     * The HTTP message factory.
28
     *
29
     * @var \Http\Message\MessageFactory
30
     */
31
    private $messageFactory;
32
33
    /**
34
     * AbstractClient constructor.
35
     *
36
     * @param \Http\Client\HttpClient $client
37
     * @param null|\Http\Message\MessageFactory $messageFactory
38
     *
39 10
     * @SuppressWarnings(PHPMD.StaticAccess)
40
     */
41 10
    public function __construct(HttpClient $client = null, MessageFactory $messageFactory = null)
42 10
    {
43 10
        $this->httpClient = $client ?? HttpClientDiscovery::find();
44
        $this->messageFactory = $messageFactory ?? MessageFactoryDiscovery::find();
45
    }
46
47
    /**
48
     * Returns the HTTP adapter.
49
     *
50 5
     * @return HttpClient
51
     */
52 5
    public function getHttpClient(): HttpClient
53 5
    {
54
        return $this->httpClient;
55 5
    }
56
57
    /**
58
     * Get the message factory.
59
     *
60
     * @return MessageFactory
61
     */
62
    public function getMessageFactory(): MessageFactory
63 5
    {
64
        return $this->messageFactory;
65 5
    }
66
67
    /**
68
     * {@inheritdoc}
69
     */
70
    public function sendRequest(RequestInterface $request): ResponseInterface
71
    {
72
        return $this->httpClient->sendRequest($request);
73 5
    }
74
75 5
    /**
76
     * @param \Http\Client\HttpClient $httpClient
77
     *
78
     * @return \drupol\Yaroc\Http\AbstractClient
79
     */
80
    public function withHttpClient(HttpClient $httpClient): AbstractClient
81
    {
82
        $clone = clone $this;
83
        $clone->httpClient = $httpClient;
84
85
        return $clone;
86
    }
87
}
88