Completed
Push — master ( b22ff2...115023 )
by Daniel
02:18
created

JobWithBrazilianLocationsBuilder   B

Complexity

Total Complexity 42

Size/Duplication

Total Lines 120
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Test Coverage

Coverage 26.42%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 42
c 1
b 0
f 0
lcom 0
cbo 2
dl 0
loc 120
ccs 28
cts 106
cp 0.2642
rs 8.295

1 Method

Rating   Name   Duplication   Size   Complexity  
D fromApi() 0 111 42

How to fix   Complexity   

Complex Class

Complex classes like JobWithBrazilianLocationsBuilder often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use JobWithBrazilianLocationsBuilder, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
namespace Jobles\Careerjet\Builder;
4
5
use Jobles\Careerjet\Exception\CareerjetException;
6
7
class JobWithBrazilianLocationsBuilder
8
{
9
    /**
10
     * @param \stdClass $apiJob
11
     * @param \Jobles\Core\Job\Job $job
12
     * @return \Jobles\Core\Job\Job
13
     * @throws CareerjetException
14
     */
15 8
    public static function fromApi(\stdClass $apiJob, \Jobles\Core\Job\Job $job)
16
    {
17 8
        if (!isset($apiJob->locations)) {
18 1
            throw new CareerjetException('Invalid API job');
19
        }
20
21 7
        switch ($apiJob->locations) {
22 7
            case 'Brasil':
23 1
                break;
24 6
            case 'Acre':
25 1
                $job->setState('AC');
26 1
                break;
27 5
            case 'Alagoas':
28 1
                $job->setState('AL');
29 1
                break;
30 4
            case 'Amapá':
31 4
            case 'Amapa':
32 1
                $job->setState('AP');
33 1
                break;
34 3
            case 'Amazonas':
35 1
                $job->setState('AM');
36 1
                break;
37 2
            case 'Bahia':
38 1
                $job->setState('BA');
39 1
                break;
40 1
            case 'Ceará':
41 1
            case 'Ceara':
42 1
                $job->setState('CE');
43 1
                break;
44
            case 'Distrito-Federal':
45
            case 'Distrito Federal':
46
                $job->setState('DF');
47
                break;
48
            case 'Espírito Santo':
49
            case 'Espirito Santo':
50
                $job->setState('ES');
51
                break;
52
            case 'Goiás':
53
            case 'Goias':
54
                $job->setState('GO');
55
                break;
56
            case 'Maranhão':
57
            case 'Maranhao':
58
                $job->setState('MA');
59
                break;
60
            case 'Mato Grosso':
61
                $job->setState('MT');
62
                break;
63
            case 'Mato Grosso do Sul':
64
                $job->setState('MS');
65
                break;
66
            case 'Minas Gerais':
67
                $job->setState('MG');
68
                break;
69
            case 'Pará':
70
            case 'Para':
71
                $job->setState('PA');
72
                break;
73
            case 'Paraíba':
74
            case 'Paraiba':
75
                $job->setState('PB');
76
                break;
77
            case 'Paraná':
78
            case 'Parana':
79
                $job->setState('PR');
80
                break;
81
            case 'Pernambuco':
82
                $job->setState('PE');
83
                break;
84
            case 'Piauí':
85
            case 'Piaui':
86
                $job->setState('PI');
87
                break;
88
            case 'Rio de Janeiro':
89
                $job->setState('RJ');
90
                break;
91
            case 'Rio Grande do Norte':
92
                $job->setState('RN');
93
                break;
94
            case 'Rio Grande do Sul':
95
                $job->setState('RS');
96
                break;
97
            case 'Rondônia':
98
            case 'Rondonia':
99
                $job->setState('RO');
100
                break;
101
            case 'Roraima':
102
                $job->setState('RR');
103
                break;
104
            case 'Santa Catarina':
105
                $job->setState('SC');
106
                break;
107
            case 'São Paulo':
108
            case 'Sao Paulo':
109
                $job->setState('SP');
110
                break;
111
            case 'Sergipe':
112
                $job->setState('SE');
113
                break;
114
            case 'Tocantins':
115
                $job->setState('TO');
116
                break;
117
            default:
118
                list($city, $state) = explode(' - ', $apiJob->locations);
119
                $job->setState($state);
120
                $job->setCity($city);
121
                break;
122 7
        }
123
124 7
        return $job;
125
    }
126
}
127