Completed
Push — master ( f3ae79...9c48b0 )
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 100%

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