ApiClient   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 3
c 1
b 0
f 0
lcom 0
cbo 3
dl 0
loc 65
ccs 11
cts 11
cp 1
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 1
A configure() 0 9 1
A create() 0 6 1
1
<?php
2
declare(strict_types = 1);
3
4
namespace AdamPaterson\ApiClient\Foundation;
5
6
use AdamPaterson\ApiClient\Foundation\Http\ClientBuilder;
7
use AdamPaterson\ApiClient\Foundation\Http\RequestBuilder;
8
use AdamPaterson\ApiClient\Foundation\Hydrator\ArrayHydrator;
9
use AdamPaterson\ApiClient\Foundation\Contract\HydratorInterface as Hydrator;
10
use Http\Client\HttpClient;
11
12
/**
13
 * Class ApiClient
14
 *
15
 * @package AdamPaterson\ApiClient\Foundation
16
 */
17
class ApiClient
18
{
19
    /**
20
     * @var \Http\Client\HttpClient
21
     */
22
    protected $httpClient;
23
24
    /**
25
     * @var \AdamPaterson\ApiClient\Foundation\Contract\HydratorInterface
26
     */
27
    protected $hydrator;
28
29
    /**
30
     * @var \AdamPaterson\ApiClient\Foundation\Http\RequestBuilder
31
     */
32
    protected $requestBuilder;
33
34
    /**
35
     * ApiClient constructor.
36
     *
37
     * @param \Http\Client\HttpClient                                            $httpClient
38
     * @param \AdamPaterson\ApiClient\Foundation\Contract\HydratorInterface|null $hydrator
39
     * @param \AdamPaterson\ApiClient\Foundation\Http\RequestBuilder|null        $requestBuilder
40
     */
41 6
    public function __construct(
42
        HttpClient $httpClient,
43
        Hydrator $hydrator = null,
44
        RequestBuilder $requestBuilder = null
45
    ) {
46 6
        $this->httpClient = $httpClient;
47 6
        $this->hydrator = $hydrator ?? new ArrayHydrator;
48 6
        $this->requestBuilder = $requestBuilder ?? new RequestBuilder;
49 6
    }
50
51
    /**
52
     * Create configured client
53
     *
54
     * @param \AdamPaterson\ApiClient\Foundation\Http\ClientBuilder              $httpClientBuilder
55
     * @param \AdamPaterson\ApiClient\Foundation\Contract\HydratorInterface|null $hydrator
56
     * @param \AdamPaterson\ApiClient\Foundation\Http\RequestBuilder|null        $requestBuilder
57
     *
58
     * @return \AdamPaterson\ApiClient\Foundation\ApiClient
59
     */
60 6
    public static function configure(
61
        ClientBuilder $httpClientBuilder,
62
        Hydrator $hydrator = null,
63
        RequestBuilder $requestBuilder = null
64
    ): self {
65 6
        $httpClient = $httpClientBuilder->createConfiguredClient();
66
67 6
        return new self($httpClient, $hydrator, $requestBuilder);
68
    }
69
70
    /**
71
     * Create and configure client
72
     *
73
     * @return \AdamPaterson\ApiClient\Foundation\ApiClient
74
     */
75 3
    public static function create(): ApiClient
76
    {
77 3
        $httpClientBuilder = new ClientBuilder;
78
79 3
        return self::configure($httpClientBuilder);
80
    }
81
}
82