JobWithBrazilianLocationsBuilder   B
last analyzed

Complexity

Total Complexity 42

Size/Duplication

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