Completed
Push — master ( 17312a...d17d72 )
by Mario
03:12
created

TogglFactory   B

Complexity

Total Complexity 6

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 17

Test Coverage

Coverage 84.09%

Importance

Changes 7
Bugs 0 Features 3
Metric Value
wmc 6
c 7
b 0
f 3
lcom 0
cbo 17
dl 0
loc 76
ccs 37
cts 44
cp 0.8409
rs 7.8571

1 Method

Rating   Name   Duplication   Size   Complexity  
B buildToggable() 0 64 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 string $config
35
     *
36
     * @return \Marek\Toggable\Toggl
37
     *
38
     * @throws \InvalidArgumentException
39
     */
40 14
    public static function buildToggable($config)
41 1
    {
42 14
        if (!file_exists($config)) {
43 2
            throw new \InvalidArgumentException('Please provide configuration file.');
44
        }
45
46 13
        $config = require($config);
47
        
48 13
        if (!empty($config['marek_toggable']['security']['token'])) {
49
50 13
            $authentication = new ApiToken($config['marek_toggable']['security']['token']);
51
52 13
        } else if (!empty($config['marek_toggable']['security']['username']) && !empty($config['marek_toggable']['security']['password'])) {
53
54
            $authentication = new UsernameAndPasswordToken(
55
                $config['marek_toggable']['security']['username'],
56
                $config['marek_toggable']['security']['password']
57
            );
58
59
        } else {
60
61
            throw new \InvalidArgumentException('Please provide security configuration.');
62
63
        }
64
65 13
        if (empty($config['marek_toggable']['base_uri']))
66 13
        {
67
            throw new \InvalidArgumentException('Please provide base URI.');
68
        }
69
70 13
        $nativeHttpClient = new NativeHttpClient($config['marek_toggable']['base_uri'], $authentication);
71 13
        $requestManager = new NativeRequestManager($nativeHttpClient);
72
73 13
        $hydrator = HydratorFactory::createHydrator();
74
75 13
        $authenticationService = new AuthenticationService($requestManager, $hydrator);
76 13
        $clientService = new ClientService($requestManager, $hydrator);
77 13
        $dashboardService = new DashboardService($requestManager, $hydrator);
78 13
        $projectService = new ProjectService($requestManager, $hydrator);
79 13
        $projectUsersService = new ProjectUsersService($requestManager, $hydrator);
80 13
        $tagService = new TagService($requestManager, $hydrator);
81 13
        $taskService = new TaskService($requestManager, $hydrator);
82 13
        $timeEntryService = new TimeEntryService($requestManager, $hydrator);
83
84 13
        $userService = new UserService($requestManager, $hydrator);
85 13
        $workspaceService = new WorkspaceService($requestManager, $hydrator);
86 13
        $workspaceUsersService = new WorkspaceUsersService($requestManager, $hydrator);
87
88 13
        $toggl = new Toggl(
89 13
            $authenticationService,
90 13
            $clientService,
91 13
            $dashboardService,
92 13
            $projectService,
93 13
            $projectUsersService,
94 13
            $tagService,
95 13
            $taskService,
96 13
            $timeEntryService,
97 13
            $userService,
98 13
            $workspaceService,
99
            $workspaceUsersService
100 13
        );
101
102 13
        return $toggl;
103
    }
104
}
105