Completed
Push — master ( 05297f...b8a6a6 )
by Vragov
03:04
created

Client   B

Complexity

Total Complexity 10

Size/Duplication

Total Lines 95
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 16

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 16
dl 0
loc 95
rs 8.4614
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 3
A getHttpClient() 0 7 1
A authenticate() 0 9 1
A getUserApi() 0 4 1
A getOrderApi() 0 4 1
A getSettingApi() 0 4 1
A getCalculateApi() 0 4 1
A addPlugin() 0 6 1
1
<?php
2
3
namespace SafeCrow;
4
5
use Http\Client\Common\HttpMethodsClient;
6
use Http\Client\Common\Plugin;
7
use Http\Client\Common\Plugin\AddHostPlugin;
8
use Http\Client\Common\Plugin\HeaderDefaultsPlugin;
9
use Http\Client\Common\PluginClient;
10
use Http\Client\HttpClient;
11
use Http\Discovery\HttpClientDiscovery;
12
use Http\Discovery\MessageFactoryDiscovery;
13
use Http\Discovery\UriFactoryDiscovery;
14
use Http\Message\RequestFactory;
15
use SafeCrow\Api\CalculateApi;
16
use SafeCrow\Api\OrderApi;
17
use SafeCrow\Api\SettingApi;
18
use SafeCrow\Api\UserApi;
19
use SafeCrow\Plugin\ApiVersionPlugin;
20
use SafeCrow\Plugin\AuthenticationPlugin;
21
use SafeCrow\Plugin\ErrorExceptionPlugin;
22
23
/**
24
 * Class Client
25
 * @package SafeCrow
26
 */
27
class Client
28
{
29
    /**
30
     * @var HttpClient
31
     */
32
    protected $httpClient;
33
34
    /**
35
     * @var RequestFactory
36
     */
37
    protected $requestFactory;
38
39
    /**
40
     * @var Plugin[]
41
     */
42
    protected $plugins = [];
43
44
    /**
45
     * Client constructor.
46
     * @param HttpClient     $httpClient
47
     * @param RequestFactory $requestFactory
48
     */
49
    public function __construct(HttpClient $httpClient = null, RequestFactory $requestFactory = null)
50
    {
51
        $this->httpClient = $httpClient ?: HttpClientDiscovery::find();
52
        $this->requestFactory = $requestFactory ?: MessageFactoryDiscovery::find();
53
    }
54
55
    /**
56
     * @return HttpMethodsClient
57
     */
58
    public function getHttpClient(): HttpMethodsClient
59
    {
60
        return new HttpMethodsClient(
61
            new PluginClient($this->httpClient, $this->plugins),
62
            $this->requestFactory
63
        );
64
    }
65
66
    /**
67
     * @param Config $config
68
     */
69
    public function authenticate(Config $config)
70
    {
71
        $this
72
            ->addPlugin(new ErrorExceptionPlugin())
73
            ->addPlugin(new AddHostPlugin(UriFactoryDiscovery::find()->createUri($config->getUrl())))
74
            ->addPlugin(new HeaderDefaultsPlugin($config->getHeaders()))
75
            ->addPlugin(new ApiVersionPlugin())
76
            ->addPlugin(new AuthenticationPlugin($config->getKey(), $config->getSecret()));
77
    }
78
79
    /**
80
     * @return UserApi
81
     */
82
    public function getUserApi(): UserApi
83
    {
84
        return new UserApi($this);
85
    }
86
87
    /**
88
     * @return OrderApi
89
     */
90
    public function getOrderApi(): OrderApi
91
    {
92
        return new OrderApi($this);
93
    }
94
95
    /**
96
     * @return SettingApi
97
     */
98
    public function getSettingApi(): SettingApi
99
    {
100
        return new SettingApi($this);
101
    }
102
103
    /**
104
     * @return CalculateApi
105
     */
106
    public function getCalculateApi(): CalculateApi
107
    {
108
        return new CalculateApi($this);
109
    }
110
111
    /**
112
     * @param Plugin $plugin
113
     * @return Client
114
     */
115
    protected function addPlugin(Plugin $plugin): Client
116
    {
117
        $this->plugins[] = $plugin;
118
119
        return $this;
120
    }
121
}
122