Completed
Pull Request — master (#1)
by Laurent
04:28
created

ClientBuilder   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 90
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 90
rs 10
c 0
b 0
f 0
wmc 6

5 Methods

Rating   Name   Duplication   Size   Complexity  
A createSerializer() 0 7 1
A setDebug() 0 5 1
A __construct() 0 8 1
A createHttpClient() 0 11 1
A build() 0 5 1
1
<?php
2
3
namespace Dolibarr\Client;
4
5
use Doctrine\Common\Annotations\AnnotationRegistry;
6
use Dolibarr\Client\HttpClient\HttpClient;
7
use Dolibarr\Client\HttpClient\Middleware\AuthenticationMiddleware;
8
use Dolibarr\Client\Security\Authentication\Authentication;
9
use GuzzleHttp\HandlerStack;
10
use JMS\Serializer\Serializer;
11
use JMS\Serializer\SerializerBuilder;
12
use Webmozart\Assert\Assert;
13
14
/**
15
 * @package Dolibarr\Api\Client
16
 */
17
final class ClientBuilder
18
{
19
20
    /**
21
     * @var string
22
     */
23
    private $baseUri;
24
25
    /**
26
     * @var Authentication
27
     */
28
    private $authentication;
29
30
    /**
31
     * @var boolean
32
     */
33
    private $debug;
34
35
    /**
36
     * @param string         $baseUri        The base uri of the api
37
     * @param Authentication $authentication The authentication to access the api
38
     */
39
    public function __construct(
40
        $baseUri,
41
        Authentication $authentication
42
    ) {
43
        Assert::stringNotEmpty($baseUri, "The baseUri should not be empty");
44
45
        $this->baseUri = $baseUri;
46
        $this->authentication = $authentication;
47
    }
48
49
    /**
50
     * @return Client
51
     */
52
    public function build()
53
    {
54
        return new Client(
55
            $this->createHttpClient(),
56
            $this->createSerializer()
57
        );
58
    }
59
60
    /**
61
     * @param boolean $debug
62
     *
63
     * @return $this
64
     */
65
    public function setDebug($debug)
66
    {
67
        $this->debug = (bool)$debug;
68
69
        return $this;
70
    }
71
72
    /**
73
     * @return Serializer
74
     */
75
    private function createSerializer()
76
    {
77
        AnnotationRegistry::registerLoader('class_exists');
78
79
        return SerializerBuilder::create()
80
          ->addDefaultHandlers()
81
          ->build();
82
    }
83
84
    /**
85
     * @return HttpClient
86
     */
87
    private function createHttpClient()
88
    {
89
        $httpClient = new HttpClient(
90
            [
91
                'base_uri' => $this->baseUri,
92
                'handler'  => $this->createHandlerStack(),
93
                'debug'    => $this->debug
94
            ]
95
        );
96
97
        return $httpClient;
98
    }
99
100
    /**
101
     * @return HandlerStack
102
     */
103
    private function createHandlerStack()
104
    {
105
        $stack = HandlerStack::create();
106
        $stack->push(new AuthenticationMiddleware($this->authentication));
107
108
        return $stack;
109
    }
110
}
111