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

ClientBuilder::setDebug()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
c 0
b 0
f 0
dl 0
loc 5
rs 10
cc 1
nc 1
nop 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