Completed
Push — master ( 9c48b0...ba7492 )
by Daniel
02:16
created

Locale   F

Complexity

Total Complexity 71

Size/Duplication

Total Lines 239
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Test Coverage

Coverage 95.93%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 71
c 1
b 0
f 1
lcom 0
cbo 0
dl 0
loc 239
ccs 212
cts 221
cp 0.9593
rs 2.6315

1 Method

Rating   Name   Duplication   Size   Complexity  
D byCountryAndLanguage() 0 231 71

How to fix   Complexity   

Complex Class

Complex classes like Locale 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 Locale, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
namespace Jobles\Careerjet;
4
5
class Locale
6
{
7
    /**
8
     * @param string $country
9
     * @param string $language
10
     * @return string
11
     */
12 64
    public static function byCountryAndLanguage($country, $language = null)
13
    {
14
        switch ($country) {
15 64
            case 'Australia': // English
16 1
                $locale = 'en_AU';
17 1
                break;
18 63
            case 'Austria': // German
19 1
                $locale = 'de_AT';
20 1
                break;
21 62
            case 'Argentina': // Spanish
22 1
                $locale = 'es_AR';
23 1
                break;
24 61
            case 'Belgium':
25
                switch ($language) {
26 2
                    case 'French':
27 1
                        $locale = 'fr_BE';
28 1
                        break;
29 1
                    case 'Dutch':
30 1
                    default:
31 1
                        $locale = 'nl_BE';
32 1
                        break;
33
                }
34 2
                break;
35 59
            case 'Bolivia': // Spanish
36 1
                $locale = 'es_BO';
37 1
                break;
38 58
            case 'Brazil': // Portuguese
39 1
                $locale = 'pt_BR';
40 1
                break;
41 57
            case 'Canada': // French
42
                switch ($language) {
43 2
                    case 'French':
44 1
                        $locale = 'fr_CA';
45 1
                        break;
46 1
                    case 'English':
47 1
                    default:
48 1
                        $locale = 'en_CA';
49 1
                        break;
50
                }
51 2
                break;
52 55
            case 'Chile': // Spanish
53 1
                $locale = 'es_CL';
54 1
                break;
55 54
            case 'China':
56
                switch ($language) {
57 2
                    case 'English':
58 1
                        $locale = 'en_CN';
59 1
                        break;
60 1
                    case 'Chinese':
61 1
                    default:
62 1
                        $locale = 'zh_CN';
63 1
                        break;
64
                }
65 2
                break;
66 52
            case 'Costa Rica': // Spanish
67 1
                $locale = 'es_CR';
68 1
                break;
69 51
            case 'Czech Republic': // Czech
70 1
                $locale = 'cs_CZ';
71 1
                break;
72 50
            case 'Denmark': // Danish
73 1
                $locale = 'da_DK';
74 1
                break;
75 49
            case 'Dominican Republic': // Spanish
76 1
                $locale = 'es_DO';
77 1
                break;
78 48
            case 'Ecuador': // Spanish
79 1
                $locale = 'es_EC';
80 1
                break;
81 47
            case 'Finland': // Finnish
82 1
                $locale = 'fi_FI';
83 1
                break;
84 46
            case 'France': // French
85 1
                $locale = 'fr_FR';
86 1
                break;
87 45
            case 'Germany': // German
88 1
                $locale = 'de_DE';
89 1
                break;
90 44
            case 'Guatemala': // Spanish
91 1
                $locale = 'es_GT';
92 1
                break;
93 43
            case 'Hungary': // Hungarian
94 1
                $locale = 'hu_HU';
95 1
                break;
96 42
            case 'Hong Kong': // English
97 1
                $locale = 'en_HK';
98 1
                break;
99 41
            case 'Italy': // Italian
100 1
                $locale = 'it_IT';
101 1
                break;
102 40
            case 'Ireland': // English
103 1
                $locale = 'en_IE';
104 1
                break;
105 39
            case 'India': // English
106 1
                $locale = 'en_IN';
107 1
                break;
108 38
            case 'Japan': // Japanese
109 1
                $locale = 'ja_JP';
110 1
                break;
111 37
            case 'Korea': // Korean
112 1
                $locale = 'ko_KR';
113 1
                break;
114 36
            case 'Luxembourg': // French
115 1
                $locale = 'fr_LU';
116 1
                break;
117 35
            case 'Malaysia': // English
118 1
                $locale = 'en_MY';
119 1
                break;
120 34
            case 'Mexico': // Spanish
121 1
                $locale = 'es_MX';
122 1
                break;
123 33
            case 'Morocco': // French
124 1
                $locale = 'fr_MA';
125 1
                break;
126 32
            case 'Netherlands': // Dutch
127 1
                $locale = 'nl_NL';
128 1
                break;
129 31
            case 'New Zealand': // English
130 1
                $locale = 'en_NZ';
131 1
                break;
132 30
            case 'Norway': // Norwegian
133 1
                $locale = 'no_NO';
134 1
                break;
135 29
            case 'Oman': // English
136 1
                $locale = 'en_OM';
137 1
                break;
138 28
            case 'Pakistan': // English
139 1
                $locale = 'en_PK';
140 1
                break;
141 27
            case 'Panama': // Spanish
142 1
                $locale = 'es_PA';
143 1
                break;
144 26
            case 'Paraguay': // Spanish
145 1
                $locale = 'es_PY';
146 1
                break;
147 25
            case 'Philippines': // English
148 1
                $locale = 'en_PH';
149 1
                break;
150 24
            case 'Peru': // Spanish
151 1
                $locale = 'es_PE';
152 1
                break;
153 23
            case 'Poland': // Polish
154 1
                $locale = 'pl_PL';
155 1
                break;
156 22
            case 'Portugal': // Portuguese
157 1
                $locale = 'pt_PT';
158 1
                break;
159 21
            case 'Puerto Rico': // Spanish
160 1
                $locale = 'es_PR';
161 1
                break;
162 20
            case 'Qatar': // English
163 1
                $locale = 'en_QA';
164 1
                break;
165 19
            case 'Russia': // Russian
166 1
                $locale = 'ru_RU';
167 1
                break;
168 18
            case 'Singapore': // English
169 1
                $locale = 'en_SG';
170 1
                break;
171 17
            case 'Slovakia': // Slovak
172 1
                $locale = 'sk_SK';
173 1
                break;
174 16
            case 'South Africa': // English
175 1
                $locale = 'en_ZA';
176 1
                break;
177 15
            case 'Spain': // Spanish
178 1
                $locale = 'es_ES';
179 1
                break;
180 14
            case 'Sweden': // Swedish
181 1
                $locale = 'sv_SE';
182 1
                break;
183 13
            case 'Switzerland':
184
                switch ($language) {
185 2
                    case 'German':
186 1
                        $locale = 'de_CH';
187 1
                        break;
188 1
                    case 'French':
189 1
                    default:
190 1
                        $locale = 'fr_CH';
191 1
                        break;
192
                }
193 2
                break;
194 11
            case 'Taiwan': // English
195 1
                $locale = 'en_TW';
196 1
                break;
197 10
            case 'Turkey': // Turkish
198 1
                $locale = 'tr_TR';
199 1
                break;
200 9
            case 'Ukraine':
201
                switch ($language) {
202 2
                    case 'Russian':
203 1
                        $locale = 'ru_UA';
204 1
                        break;
205 1
                    case 'Ukrainian':
206 1
                    default:
207 1
                        $locale = 'uk_UA';
208 1
                        break;
209
                }
210 2
                break;
211 7
            case 'United Arab Emirates': // English
212 1
                $locale = 'en_AE';
213 1
                break;
214 6
            case 'United Kingdom': // English
215 1
                $locale = 'en_GB';
216 1
                break;
217 5
            case 'United States': // English
218 1
                $locale = 'en_US';
219 1
                break;
220 4
            case 'Uruguay': // Spanish
221 1
                $locale = 'es_UY';
222 1
                break;
223 3
            case 'Venezuela': // Spanish
224 1
                $locale = 'es_VE';
225 1
                break;
226 2
            case 'Vietnam':
227
                switch ($language) {
228 2
                    case 'English':
229 1
                        $locale = 'en_VN';
230 1
                        break;
231 1
                    case 'Vietnamese':
232 1
                    default:
233 1
                        $locale = 'vi_VN';
234 1
                        break;
235
                }
236 2
                break;
237
            default:
238
                throw new \InvalidArgumentException('Please use a valid country');
239
        }
240
241 64
        return $locale;
242
    }
243
}
244