Completed
Push — master ( c93e0a...f87b82 )
by Mario
09:30 queued 03:59
created

TogglFactory   B

Complexity

Total Complexity 6

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 17

Test Coverage

Coverage 100%

Importance

Changes 8
Bugs 0 Features 3
Metric Value
wmc 6
c 8
b 0
f 3
lcom 0
cbo 17
dl 0
loc 74
ccs 28
cts 28
cp 1
rs 7.8571

1 Method

Rating   Name   Duplication   Size   Complexity  
B buildToggable() 0 62 6
1
<?php
2
3
namespace Marek\Toggable\Factory;
4
5
use Marek\Toggable\Http\Client\NativeHttpClient;
6
use Marek\Toggable\Http\Manager\NativeRequestManager;
7
use Marek\Toggable\Hydrator\HydratorFactory;
8
use Marek\Toggable\Service\Authentication\AuthenticationService;
9
use Marek\Toggable\Service\Dashboard\DashboardService;
10
use Marek\Toggable\Service\Project\ProjectService;
11
use Marek\Toggable\Service\ProjectUsers\ProjectUsersService;
12
use Marek\Toggable\Service\Tag\TagService;
13
use Marek\Toggable\Service\Task\TaskService;
14
use Marek\Toggable\Service\TimeEntry\TimeEntryService;
15
use Marek\Toggable\Service\User\UserService;
16
use Marek\Toggable\Service\WorkspaceUsers\WorkspaceUsersService;
17
use Marek\Toggable\Toggl;
18
use Marek\Toggable\API\Security\UsernameAndPasswordToken;
19
use Marek\Toggable\API\Security\ApiToken;
20
use Marek\Toggable\Http\Client\HttpClient;
21
use Marek\Toggable\Http\Manager\RequestManager;
22
use Marek\Toggable\Service\Client\ClientService;
23
use Marek\Toggable\Service\Workspace\WorkspaceService;
24
25
/**
26
 * Class TogglFactory
27
 * @package Marek\Toggable\Factory
28
 */
29
class TogglFactory
30
{
31
    /**
32
     * Builds Toggl
33
     *
34
     * @param array $config
35
     *
36
     * @return \Marek\Toggable\Toggl
37
     *
38
     * @throws \InvalidArgumentException
39
     */
40 17
    public static function buildToggable($config)
41
    {
42 17
        if (!is_array($config)) {
43 1
            throw new \InvalidArgumentException('Please provide valid configuration.');
44
        }
45
        
46 16
        if (!empty($config['marek_toggable']['security']['token'])) {
47
48 14
            $authentication = new ApiToken($config['marek_toggable']['security']['token']);
49
50 2
        } else if (!empty($config['marek_toggable']['security']['username']) && !empty($config['marek_toggable']['security']['password'])) {
51
52 1
            $authentication = new UsernameAndPasswordToken(
53 1
                $config['marek_toggable']['security']['username'],
54 1
                $config['marek_toggable']['security']['password']
55
            );
56
57
        } else {
58
59 1
            throw new \InvalidArgumentException('Please provide security configuration.');
60
61
        }
62
63 15
        if (empty($config['marek_toggable']['base_uri']))
64
        {
65 1
            throw new \InvalidArgumentException('Please provide base URI.');
66
        }
67
68 14
        $nativeHttpClient = new NativeHttpClient();
69 14
        $requestManager = new NativeRequestManager($nativeHttpClient, $authentication, $config['marek_toggable']['base_uri']);
70
71 14
        $hydrator = HydratorFactory::createHydrator();
72
73 14
        $authenticationService = new AuthenticationService($requestManager, $hydrator);
74 14
        $clientService = new ClientService($requestManager, $hydrator);
75 14
        $dashboardService = new DashboardService($requestManager, $hydrator);
76 14
        $projectService = new ProjectService($requestManager, $hydrator);
77 14
        $projectUsersService = new ProjectUsersService($requestManager, $hydrator);
78 14
        $tagService = new TagService($requestManager, $hydrator);
79 14
        $taskService = new TaskService($requestManager, $hydrator);
80 14
        $timeEntryService = new TimeEntryService($requestManager, $hydrator);
81
82 14
        $userService = new UserService($requestManager, $hydrator);
83 14
        $workspaceService = new WorkspaceService($requestManager, $hydrator);
84 14
        $workspaceUsersService = new WorkspaceUsersService($requestManager, $hydrator);
85
86 14
        $toggl = new Toggl(
87
            $authenticationService,
88
            $clientService,
89
            $dashboardService,
90
            $projectService,
91
            $projectUsersService,
92
            $tagService,
93
            $taskService,
94
            $timeEntryService,
95
            $userService,
96
            $workspaceService,
97
            $workspaceUsersService
98
        );
99
100 14
        return $toggl;
101
    }
102
}
103