TogglFactory::__construct()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3

Importance

Changes 3
Bugs 1 Features 0
Metric Value
c 3
b 1
f 0
dl 0
loc 10
ccs 7
cts 7
cp 1
rs 9.4285
cc 3
eloc 6
nc 2
nop 1
crap 3
1
<?php
2
3
namespace Marek\Toggable\Factory;
4
5
use Marek\Toggable\Factory\Authentication\AuthenticationFactory;
6
use Marek\Toggable\Factory\Http\HttpClientFactory;
7
use InvalidArgumentException;
8
use Marek\Toggable\Factory\Hydrator\HydratorFactory;
9
use Marek\Toggable\Http\Manager\NativeRequestManager;
10
use Marek\Toggable\Service\Authentication\AuthenticationService;
11
use Marek\Toggable\Service\Client\ClientService;
12
use Marek\Toggable\Service\Dashboard\DashboardService;
13
use Marek\Toggable\Service\Project\ProjectService;
14
use Marek\Toggable\Service\ProjectUsers\ProjectUsersService;
15
use Marek\Toggable\Service\Tag\TagService;
16
use Marek\Toggable\Service\Task\TaskService;
17
use Marek\Toggable\Service\TimeEntry\TimeEntryService;
18
use Marek\Toggable\Service\User\UserService;
19
use Marek\Toggable\Service\Workspace\WorkspaceService;
20
use Marek\Toggable\Service\WorkspaceUsers\WorkspaceUsersService;
21
use Marek\Toggable\Toggl;
22
23
/**
24
 * Class TogglFactory
25
 * @package Marek\Toggable\Factory
26
 */
27
class TogglFactory implements FactoryInterface
28
{
29
    /**
30
     * @var \Marek\Toggable\Factory\FactoryInterface
31
     */
32
    private $authentication;
33
34
    /**
35
     * @var \Marek\Toggable\Factory\FactoryInterface
36
     */
37
    private $http;
38
39
    /**
40
     * @var \Marek\Toggable\Factory\FactoryInterface
41
     */
42
    private $hydrator;
43
44
    /**
45
     * TogglFactory constructor.
46
     *
47
     * @param array $config
48
     */
49 15
    public function __construct($config)
50
    {
51 15
        if (!is_array($config) || empty($config)) {
52 2
            throw new InvalidArgumentException('Please provide valid configuration.');
53
        }
54 13
        $this->authentication = new AuthenticationFactory($config);
55 13
        $this->http = new HttpClientFactory($config, $this->authentication->build());
56 13
        $this->hydrator = new HydratorFactory();
57
58 13
    }
59
60
    /**
61
     * @inheritDoc
62
     */
63 13
    public function build()
64
    {
65 13
        $nativeHttpClient = $this->http->build();
66 13
        $requestManager = new NativeRequestManager($nativeHttpClient);
67
68 13
        $hydrator = $this->hydrator->build();
69
70 13
        $authenticationService = new AuthenticationService($requestManager, $hydrator);
71 13
        $clientService = new ClientService($requestManager, $hydrator);
72 13
        $dashboardService = new DashboardService($requestManager, $hydrator);
73 13
        $projectService = new ProjectService($requestManager, $hydrator);
74 13
        $projectUsersService = new ProjectUsersService($requestManager, $hydrator);
75 13
        $tagService = new TagService($requestManager, $hydrator);
76 13
        $taskService = new TaskService($requestManager, $hydrator);
77 13
        $timeEntryService = new TimeEntryService($requestManager, $hydrator);
78
79 13
        $userService = new UserService($requestManager, $hydrator);
80 13
        $workspaceService = new WorkspaceService($requestManager, $hydrator);
81 13
        $workspaceUsersService = new WorkspaceUsersService($requestManager, $hydrator);
82
83 13
        return new Toggl(
84 13
            $authenticationService,
85 13
            $clientService,
86 13
            $dashboardService,
87 13
            $projectService,
88 13
            $projectUsersService,
89 13
            $tagService,
90 13
            $taskService,
91 13
            $timeEntryService,
92 13
            $userService,
93 13
            $workspaceService,
94
            $workspaceUsersService
95 13
        );
96
    }
97
}
98