Skip to content

Commit 1da660d

Browse files
committed
Fix string formatting
1 parent 57a2915 commit 1da660d

File tree

3 files changed

+50
-68
lines changed

3 files changed

+50
-68
lines changed

src/Geocoder/Model/AddressFactory.php

Lines changed: 17 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ public function createFromArray(array $results)
5656
}
5757

5858
/**
59-
* @param array $data
60-
* @param string $key
59+
* @param array $data
60+
* @param string $key
6161
* @return double
6262
*/
6363
private function readDoubleValue(array $data, $key)
@@ -66,53 +66,35 @@ private function readDoubleValue(array $data, $key)
6666
}
6767

6868
/**
69-
* @param array $data
70-
* @param string $key
69+
* @param array $data
70+
* @param string $key
7171
* @return string
7272
*/
7373
private function readStringValue(array $data, $key)
7474
{
75-
return $this->formatString(\igorw\get_in($data, [ $key ]));
75+
return $this->valueOrNull(\igorw\get_in($data, [ $key ]));
7676
}
7777

78-
private function formatString($str)
78+
private function valueOrNull($str)
7979
{
80-
if (null !== $str) {
81-
if (extension_loaded('mbstring')) {
82-
$originalStr = $str;
83-
$str = mb_convert_case($str, MB_CASE_TITLE, 'UTF-8');
84-
// Correct for MB_TITLE_CASE's insistence on uppercasing letters
85-
// immediately preceded by numerals, eg: 1st -> 1St
86-
$originalEncoding = mb_regex_encoding();
87-
mb_regex_encoding('UTF-8');
88-
// matches an upper case letter character immediately preceded by a numeral
89-
mb_ereg_search_init($str, '[0-9]\p{Lu}');
90-
91-
while ($match = mb_ereg_search_pos()) {
92-
$charPos = $match[0] + 1;
93-
// Only swap it back to lowercase if it was lowercase to begin with
94-
if (mb_ereg_match('\p{Ll}', $originalStr[$charPos])) {
95-
$str[$charPos] = mb_strtolower($str[$charPos]);
96-
}
97-
}
98-
99-
mb_regex_encoding($originalEncoding);
100-
} else {
101-
$str = $this->lowerize($str);
102-
$str = ucwords($str);
103-
}
104-
}
105-
106-
return $str;
80+
return empty($str) ? null : $str;
10781
}
10882

10983
private function lowerize($str)
11084
{
111-
return extension_loaded('mbstring') ? mb_strtolower($str, 'UTF-8') : strtolower($str);
85+
if (null !== $str = $this->valueOrNull($str)) {
86+
return extension_loaded('mbstring') ? mb_strtolower($str, 'UTF-8') : strtolower($str);
87+
}
88+
89+
return null;
11290
}
11391

11492
private function upperize($str)
11593
{
116-
return extension_loaded('mbstring') ? mb_strtoupper($str, 'UTF-8') : strtoupper($str);
94+
if (null !== $str = $this->valueOrNull($str)) {
95+
return extension_loaded('mbstring') ? mb_strtoupper($str, 'UTF-8') : strtoupper($str);
96+
}
97+
98+
return null;
11799
}
118100
}

tests/Geocoder/Tests/Provider/GeoPluginTest.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ public function testGeocodeWithLocalhostIPv4()
5252
$this->assertCount(1, $results);
5353

5454
$result = $results[0];
55-
$this->assertEquals('Localhost', $result->getLocality());
56-
$this->assertEquals('Localhost', $result->getCounty()->getName());
57-
$this->assertEquals('Localhost', $result->getRegion()->getName());
58-
$this->assertEquals('Localhost', $result->getCountry()->getName());
55+
$this->assertEquals('localhost', $result->getLocality());
56+
$this->assertEquals('localhost', $result->getCounty()->getName());
57+
$this->assertEquals('localhost', $result->getRegion()->getName());
58+
$this->assertEquals('localhost', $result->getCountry()->getName());
5959
}
6060

6161
public function testGeocodeWithLocalhostIPv6()
@@ -67,10 +67,10 @@ public function testGeocodeWithLocalhostIPv6()
6767
$this->assertCount(1, $results);
6868

6969
$result = $results[0];
70-
$this->assertEquals('Localhost', $result->getLocality());
71-
$this->assertEquals('Localhost', $result->getCounty()->getName());
72-
$this->assertEquals('Localhost', $result->getRegion()->getName());
73-
$this->assertEquals('Localhost', $result->getCountry()->getName());
70+
$this->assertEquals('localhost', $result->getLocality());
71+
$this->assertEquals('localhost', $result->getCounty()->getName());
72+
$this->assertEquals('localhost', $result->getRegion()->getName());
73+
$this->assertEquals('localhost', $result->getCountry()->getName());
7474
}
7575

7676
/**

tests/Geocoder/Tests/Provider/YandexTest.php

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public function testGeocodeWithRealAddress()
9696

9797
/** @var \Geocoder\Model\Address $result */
9898
$result = $results[0];
99-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
99+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
100100
$this->assertEquals(48.863277, $result->getLatitude(), '', 0.01);
101101
$this->assertEquals(2.389016, $result->getLongitude(), '', 0.01);
102102
$this->assertTrue($result->getBounds()->isDefined());
@@ -119,25 +119,25 @@ public function testGeocodeWithRealAddress()
119119

120120
/** @var \Geocoder\Model\Address $result */
121121
$result = $results[1];
122-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
122+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
123123
$this->assertEquals(48.810138, $result->getLatitude(), '', 0.01);
124124
$this->assertEquals(2.435926, $result->getLongitude(), '', 0.01);
125125

126126
/** @var \Geocoder\Model\Address $result */
127127
$result = $results[2];
128-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
128+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
129129
$this->assertEquals(48.892773, $result->getLatitude(), '', 0.01);
130130
$this->assertEquals(2.246174, $result->getLongitude(), '', 0.01);
131131

132132
/** @var \Geocoder\Model\Address $result */
133133
$result = $results[3];
134-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
134+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
135135
$this->assertEquals(48.844640, $result->getLatitude(), '', 0.01);
136136
$this->assertEquals(2.420493, $result->getLongitude(), '', 0.01);
137137

138138
/** @var \Geocoder\Model\Address $result */
139139
$result = $results[4];
140-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
140+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
141141
$this->assertEquals(48.813520, $result->getLatitude(), '', 0.01);
142142
$this->assertEquals(2.324642, $result->getLongitude(), '', 0.01);
143143
}
@@ -152,7 +152,7 @@ public function testGeocodeWithRealAddressWithUALocale()
152152

153153
/** @var \Geocoder\Model\Address $result */
154154
$result = $results[0];
155-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
155+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
156156
$this->assertEquals(55.675682, $result->getLatitude(), '', 0.01);
157157
$this->assertEquals(12.567602, $result->getLongitude(), '', 0.01);
158158
$this->assertTrue($result->getBounds()->isDefined());
@@ -163,7 +163,7 @@ public function testGeocodeWithRealAddressWithUALocale()
163163
$this->assertNull($result->getStreetNumber());
164164
$this->assertNull($result->getStreetName());
165165
$this->assertEquals('Копенгаген', $result->getLocality());
166-
$this->assertEquals('Столичная Область', $result->getRegion()->getName());
166+
$this->assertEquals('Столичная область', $result->getRegion()->getName());
167167
$this->assertEquals('Данія', $result->getCountry()->getName());
168168
$this->assertEquals('DK', $result->getCountry()->getCode());
169169

@@ -175,25 +175,25 @@ public function testGeocodeWithRealAddressWithUALocale()
175175

176176
/** @var \Geocoder\Model\Address $result */
177177
$result = $results[1];
178-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
178+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
179179
$this->assertEquals(55.614439, $result->getLatitude(), '', 0.01);
180180
$this->assertEquals(12.645351, $result->getLongitude(), '', 0.01);
181181

182182
/** @var \Geocoder\Model\Address $result */
183183
$result = $results[2];
184-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
184+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
185185
$this->assertEquals(55.713258, $result->getLatitude(), '', 0.01);
186186
$this->assertEquals(12.534930, $result->getLongitude(), '', 0.01);
187187

188188
/** @var \Geocoder\Model\Address $result */
189189
$result = $results[3];
190-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
190+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
191191
$this->assertEquals(55.698878, $result->getLatitude(), '', 0.01);
192192
$this->assertEquals(12.578211, $result->getLongitude(), '', 0.01);
193193

194194
/** @var \Geocoder\Model\Address $result */
195195
$result = $results[4];
196-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
196+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
197197
$this->assertEquals(55.690380, $result->getLatitude(), '', 0.01);
198198
$this->assertEquals(12.554827, $result->getLongitude(), '', 0.01);
199199
}
@@ -208,7 +208,7 @@ public function testGeocodeWithRealAddressWithUSLocale()
208208

209209
/** @var \Geocoder\Model\Address $result */
210210
$result = $results[0];
211-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
211+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
212212
$this->assertEquals(38.898720, $result->getLatitude(), '', 0.01);
213213
$this->assertEquals(-77.036384, $result->getLongitude(), '', 0.01);
214214
$this->assertTrue($result->getBounds()->isDefined());
@@ -217,7 +217,7 @@ public function testGeocodeWithRealAddressWithUSLocale()
217217
$this->assertEquals(38.90032, $result->getBounds()->getNorth(), '', 0.01);
218218
$this->assertEquals(-77.012453, $result->getBounds()->getEast(), '', 0.01);
219219
$this->assertNull($result->getStreetNumber());
220-
$this->assertEquals('Pennsylvania Ave Nw', $result->getStreetName());
220+
$this->assertEquals('Pennsylvania Ave NW', $result->getStreetName());
221221
$this->assertEquals('Washington', $result->getLocality());
222222
$this->assertEquals('District of Columbia', $result->getRegion()->getName());
223223
$this->assertEquals('United States', $result->getCountry()->getName());
@@ -240,7 +240,7 @@ public function testGeocodeWithRealAddressWithBYLocale()
240240

241241
/** @var \Geocoder\Model\Address $result */
242242
$result = $results[0];
243-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
243+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
244244
$this->assertEquals(53.898077, $result->getLatitude(), '', 0.01);
245245
$this->assertEquals(27.563673, $result->getLongitude(), '', 0.01);
246246
$this->assertTrue($result->getBounds()->isDefined());
@@ -249,7 +249,7 @@ public function testGeocodeWithRealAddressWithBYLocale()
249249
$this->assertEquals(53.899286, $result->getBounds()->getNorth(), '', 0.01);
250250
$this->assertEquals(27.565721, $result->getBounds()->getEast(), '', 0.01);
251251
$this->assertEquals(19, $result->getStreetNumber());
252-
$this->assertEquals('Улица Ленина', $result->getStreetName());
252+
$this->assertEquals('улица Ленина', $result->getStreetName());
253253
$this->assertEquals('Минск', $result->getLocality());
254254
$this->assertNull($result->getRegion()->getName());
255255
$this->assertEquals('Беларусь', $result->getCountry()->getName());
@@ -302,7 +302,7 @@ public function testReverseWithRealCoordinates()
302302

303303
/** @var \Geocoder\Model\Address $result */
304304
$result = $results[0];
305-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
305+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
306306
$this->assertEquals(48.863212, $result->getLatitude(), '', 0.01);
307307
$this->assertEquals(2.388773, $result->getLongitude(), '', 0.01);
308308
$this->assertTrue($result->getBounds()->isDefined());
@@ -325,13 +325,13 @@ public function testReverseWithRealCoordinates()
325325

326326
/** @var \Geocoder\Model\Address $result */
327327
$result = $results[1];
328-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
328+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
329329
$this->assertEquals(48.709273, $result->getLatitude(), '', 0.01);
330330
$this->assertEquals(2.503371, $result->getLongitude(), '', 0.01);
331331

332332
/** @var \Geocoder\Model\Address $result */
333333
$result = $results[2];
334-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
334+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
335335
$this->assertEquals(46.621810, $result->getLatitude(), '', 0.01);
336336
$this->assertEquals(2.452113, $result->getLongitude(), '', 0.01);
337337
}
@@ -346,7 +346,7 @@ public function testReverseWithRealCoordinatesWithUSLocaleAndStreeToponym()
346346

347347
/** @var \Geocoder\Model\Address $result */
348348
$result = $results[0];
349-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
349+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
350350
$this->assertEquals(48.87132, $result->getLatitude(), '', 0.01);
351351
$this->assertEquals(2.404017, $result->getLongitude(), '', 0.01);
352352
$this->assertTrue($result->getBounds()->isDefined());
@@ -369,25 +369,25 @@ public function testReverseWithRealCoordinatesWithUSLocaleAndStreeToponym()
369369

370370
/** @var \Geocoder\Model\Address $result */
371371
$result = $results[1];
372-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
372+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
373373
$this->assertEquals(48.863230, $result->getLatitude(), '', 0.01);
374374
$this->assertEquals(2.388261, $result->getLongitude(), '', 0.01);
375375

376376
/** @var \Geocoder\Model\Address $result */
377377
$result = $results[2];
378-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
378+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
379379
$this->assertEquals(48.866022, $result->getLatitude(), '', 0.01);
380380
$this->assertEquals(2.389662, $result->getLongitude(), '', 0.01);
381381

382382
/** @var \Geocoder\Model\Address $result */
383383
$result = $results[3];
384-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
384+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
385385
$this->assertEquals(48.863918, $result->getLatitude(), '', 0.01);
386386
$this->assertEquals(2.387767, $result->getLongitude(), '', 0.01);
387387

388388
/** @var \Geocoder\Model\Address $result */
389389
$result = $results[4];
390-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
390+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
391391
$this->assertEquals(48.863787, $result->getLatitude(), '', 0.01);
392392
$this->assertEquals(2.389600, $result->getLongitude(), '', 0.01);
393393
}
@@ -402,7 +402,7 @@ public function testReverseWithRealCoordinatesWithUALocaleAndHouseToponym()
402402

403403
/** @var \Geocoder\Model\Address $result */
404404
$result = $results[0];
405-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
405+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
406406
$this->assertEquals(60.454462, $result->getLatitude(), '', 0.01);
407407
$this->assertEquals(22.256561, $result->getLongitude(), '', 0.01);
408408
$this->assertTrue($result->getBounds()->isDefined());
@@ -434,7 +434,7 @@ public function testReverseWithRealCoordinatesWithTRLocaleAndLocalityToponym()
434434

435435
/** @var \Geocoder\Model\Address $result */
436436
$result = $results[0];
437-
$this->assertInstanceOf('\Geocoder\Model\Address', $result);
437+
$this->assertInstanceOf('Geocoder\Model\Address', $result);
438438
$this->assertEquals(40.909452, $result->getLatitude(), '', 0.01);
439439
$this->assertEquals(29.138608, $result->getLongitude(), '', 0.01);
440440
$this->assertTrue($result->getBounds()->isDefined());

0 commit comments

Comments
 (0)