eCurringClientFactory   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 27
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 2
eloc 16
dl 0
loc 27
ccs 0
cts 18
cp 0
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 10 1
A createHttpClient() 0 12 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace LauLamanApps\eCurring;
6
7
use GuzzleHttp\Handler\CurlHandler;
8
use GuzzleHttp\HandlerStack;
9
use GuzzleHttp\Middleware;
10
use LauLamanApps\eCurring\Http\Adapter\Guzzle\Client as GuzzleClient;
11
use LauLamanApps\eCurring\Http\ClientInterface;
12
use LauLamanApps\eCurring\Http\Endpoint\Production;
13
use LauLamanApps\eCurring\Http\Resource\CreateParser;
14
use LauLamanApps\eCurring\Http\Resource\UpdateParser;
15
use LauLamanApps\eCurring\Resource\Factory\CustomerFactory;
16
use LauLamanApps\eCurring\Resource\Factory\ProductFactory;
17
use LauLamanApps\eCurring\Resource\Factory\SubscriptionFactory;
18
use LauLamanApps\eCurring\Resource\Factory\Transaction\EventFactory;
19
use LauLamanApps\eCurring\Resource\Factory\TransactionFactory;
20
use Psr\Http\Message\RequestInterface;
21
22
final class eCurringClientFactory
23
{
24
    public static function create(string $apiKey): eCurringClient
25
    {
26
        return new eCurringClient(
27
            self::createHttpClient($apiKey),
28
            new CustomerFactory(),
29
            new SubscriptionFactory(),
30
            new ProductFactory(),
31
            new TransactionFactory(new EventFactory()),
32
            new CreateParser(),
33
            new UpdateParser()
34
        );
35
    }
36
37
    private static function createHttpClient(string $apiKey): ClientInterface
38
    {
39
        $handler = new HandlerStack();
40
        $handler->setHandler(new CurlHandler());
41
42
        $handler->push(Middleware::mapRequest(function (RequestInterface $request) use ($apiKey) {
43
            return $request->withHeader('X-Authorization', $apiKey);
44
        }));
45
46
        return new GuzzleClient(
47
            new \GuzzleHttp\Client(['handler' => $handler]),
48
            new Production()
49
        );
50
    }
51
}
52