NestClientFactory::create()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 7
nc 1
nop 1
dl 0
loc 10
ccs 0
cts 8
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace LauLamanApps\NestApi;
6
7
use GuzzleHttp\Handler\CurlHandler;
8
use GuzzleHttp\HandlerStack;
9
use GuzzleHttp\Middleware;
10
use LauLamanApps\NestApi\Client\Factory\Device\Camera\EventFactory;
11
use LauLamanApps\NestApi\Client\Factory\Device\CameraFactory;
12
use LauLamanApps\NestApi\Client\Factory\Device\SmokeCoAlarmFactory;
13
use LauLamanApps\NestApi\Client\Factory\Device\ThermostatFactory;
14
use LauLamanApps\NestApi\Client\Factory\StructureFactory;
15
use LauLamanApps\NestApi\Http\Adapter\Guzzle\Client as GuzzleClient;
16
use LauLamanApps\NestApi\Http\ClientInterface;
17
use LauLamanApps\NestApi\Http\Endpoint\Production;
18
use Psr\Http\Message\RequestInterface;
19
20
final class NestClientFactory
21
{
22
    public static function create(string $accessToken): NestClient
23
    {
24
        return new NestClient(
25
            self::createHttpClient($accessToken),
26
            new ThermostatFactory(),
27
            new SmokeCoAlarmFactory(),
28
            new CameraFactory(
29
                new EventFactory()
30
            ),
31
            new StructureFactory()
32
        );
33
    }
34
35
    private static function createHttpClient(string $accessToken): ClientInterface
36
    {
37
        $handler = new HandlerStack();
38
        $handler->setHandler(new CurlHandler());
39
40
        $handler->push(Middleware::mapRequest(function (RequestInterface $request) use ($accessToken) {
41
            return $request->withHeader('Authorization', 'Bearer ' . $accessToken);
42
        }));
43
44
        return new GuzzleClient(
45
            new \GuzzleHttp\Client(['handler' => $handler]),
46
            new Production()
47
        );
48
    }
49
}
50