ApiClient   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 5
dl 0
loc 80
ccs 0
cts 30
cp 0
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 3
A configure() 0 9 1
A create() 0 6 1
A tweets() 0 4 1
A stats() 0 4 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This software may be modified and distributed under the terms
7
 * of the MIT license. See the LICENSE file for details.
8
 */
9
10
namespace FAPI\Boilerplate;
11
12
use FAPI\Boilerplate\Api\Stat;
13
use FAPI\Boilerplate\Api\Tweet;
14
use FAPI\Boilerplate\Hydrator\ModelHydrator;
15
use FAPI\Boilerplate\Hydrator\Hydrator;
16
use Http\Client\HttpClient;
17
18
/**
19
 * @author Tobias Nyholm <[email protected]>
20
 */
21
final class ApiClient
22
{
23
    /**
24
     * @var HttpClient
25
     */
26
    private $httpClient;
27
28
    /**
29
     * @var Hydrator
30
     */
31
    private $hydrator;
32
33
    /**
34
     * @var RequestBuilder
35
     */
36
    private $requestBuilder;
37
38
    /**
39
     * The constructor accepts already configured HTTP clients.
40
     * Use the configure method to pass a configuration to the Client and create an HTTP Client.
41
     *
42
     * @param HttpClient          $httpClient
43
     * @param Hydrator|null       $hydrator
44
     * @param RequestBuilder|null $requestBuilder
45
     */
46
    public function __construct(
47
        HttpClient $httpClient,
48
        Hydrator $hydrator = null,
49
        RequestBuilder $requestBuilder = null
50
    ) {
51
        $this->httpClient = $httpClient;
52
        $this->hydrator = $hydrator ?: new ModelHydrator();
53
        $this->requestBuilder = $requestBuilder ?: new RequestBuilder();
54
    }
55
56
    /**
57
     * @param HttpClientConfigurator $httpClientConfigurator
58
     * @param Hydrator|null          $hydrator
59
     * @param RequestBuilder|null    $requestBuilder
60
     *
61
     * @return ApiClient
62
     */
63
    public static function configure(
64
        HttpClientConfigurator $httpClientConfigurator,
65
        Hydrator $hydrator = null,
66
        RequestBuilder $requestBuilder = null
67
    ): self {
68
        $httpClient = $httpClientConfigurator->createConfiguredClient();
69
70
        return new self($httpClient, $hydrator, $requestBuilder);
71
    }
72
73
    /**
74
     * @param string $apiKey
75
     *
76
     * @return ApiClient
77
     */
78
    public static function create(string $apiKey): ApiClient
79
    {
80
        $httpClientConfigurator = (new HttpClientConfigurator())->setApiKey($apiKey);
81
82
        return self::configure($httpClientConfigurator);
83
    }
84
85
    /**
86
     * @return Api\Tweet
87
     */
88
    public function tweets(): Tweet
89
    {
90
        return new Api\Tweet($this->httpClient, $this->hydrator, $this->requestBuilder);
91
    }
92
93
    /**
94
     * @return Api\Stat
95
     */
96
    public function stats(): Stat
97
    {
98
        return new Api\Stat($this->httpClient, $this->hydrator, $this->requestBuilder);
99
    }
100
}
101