ApiClient::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 5
cts 5
cp 1
rs 9.6666
c 0
b 0
f 0
cc 1
eloc 7
nc 1
nop 3
crap 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