TogglFactory   B
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 17

Test Coverage

Coverage 100%

Importance

Changes 13
Bugs 1 Features 3
Metric Value
wmc 4
c 13
b 1
f 3
lcom 1
cbo 17
dl 0
loc 71
ccs 34
cts 34
cp 1
rs 7.8571

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 3
B build() 0 34 1
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