Completed
Push — master ( 94a660...113089 )
by Daniel
02:22
created

Locale   F

Complexity

Total Complexity 71

Size/Duplication

Total Lines 233
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 1
Metric Value
wmc 71
c 2
b 0
f 1
lcom 0
cbo 0
dl 0
loc 233
ccs 215
cts 215
cp 1
rs 2.6315

1 Method

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