Skip to content

Commit 35813f8

Browse files
committed
Fix #367
1 parent 1da660d commit 35813f8

File tree

9 files changed

+65
-32
lines changed

9 files changed

+65
-32
lines changed

src/Geocoder/Model/Address.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,19 @@ final class Address
7070
*/
7171
private $timezone;
7272

73-
public function __construct(Coordinates $coordinates, Bounds $bounds, $streetNumber, $streetName, $postalCode, $locality, $subLocality, County $county, Region $region, Country $country, $timezone)
74-
{
73+
public function __construct(
74+
Coordinates $coordinates = null,
75+
Bounds $bounds = null,
76+
$streetNumber = null,
77+
$streetName = null,
78+
$postalCode = null,
79+
$locality = null,
80+
$subLocality = null,
81+
County $county = null,
82+
Region $region = null,
83+
Country $country = null,
84+
$timezone = null
85+
) {
7586
$this->coordinates = $coordinates;
7687
$this->bounds = $bounds;
7788
$this->streetNumber = $streetNumber;
@@ -102,6 +113,10 @@ public function getCoordinates()
102113
*/
103114
public function getLatitude()
104115
{
116+
if (null === $this->coordinates) {
117+
return null;
118+
}
119+
105120
return $this->coordinates->getLatitude();
106121
}
107122

@@ -112,6 +127,10 @@ public function getLatitude()
112127
*/
113128
public function getLongitude()
114129
{
130+
if (null === $this->coordinates) {
131+
return null;
132+
}
133+
115134
return $this->coordinates->getLongitude();
116135
}
117136

src/Geocoder/Model/AddressFactory.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public function createFromArray(array $results)
2121
$addresses = [];
2222
foreach ($results as $result) {
2323
$addresses[] = new Address(
24-
new Coordinates(
24+
$this->createCoordinates(
2525
$this->readDoubleValue($result, 'latitude'),
2626
$this->readDoubleValue($result, 'longitude')
2727
),
@@ -62,7 +62,7 @@ public function createFromArray(array $results)
6262
*/
6363
private function readDoubleValue(array $data, $key)
6464
{
65-
return (double) \igorw\get_in($data, explode('.', $key));
65+
return \igorw\get_in($data, explode('.', $key));
6666
}
6767

6868
/**
@@ -97,4 +97,13 @@ private function upperize($str)
9797

9898
return null;
9999
}
100+
101+
private function createCoordinates($latitude, $longitude)
102+
{
103+
if (null === $latitude || null === $longitude) {
104+
return null;
105+
}
106+
107+
return new Coordinates((double) $latitude, (double) $longitude);
108+
}
100109
}

src/Geocoder/Provider/AbstractProvider.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ abstract class AbstractProvider
3535
private $limit = Provider::MAX_RESULTS;
3636

3737
/**
38-
* @param HttpAdapterInterface $adapter An HTTP adapter
38+
* @param HttpAdapterInterface|null $adapter An HTTP adapter
3939
*/
40-
public function __construct(HttpAdapterInterface $adapter)
40+
public function __construct(HttpAdapterInterface $adapter = null)
4141
{
4242
$this->adapter = $adapter;
4343
$this->factory = new AddressFactory();

src/Geocoder/Provider/GeoIP2.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,22 @@
2121
*/
2222
class GeoIP2 extends AbstractProvider implements LocaleAwareProvider
2323
{
24+
/**
25+
* @var GeoIP2Adapter
26+
*/
27+
private $adapter;
28+
2429
/**
2530
* @var string
2631
*/
2732
private $locale;
2833

2934
public function __construct(GeoIP2Adapter $adapter, $locale = 'en')
3035
{
31-
parent::__construct($adapter);
36+
parent::__construct(null);
3237

33-
$this->locale = $locale;
38+
$this->adapter = $adapter;
39+
$this->locale = $locale;
3440
}
3541

3642
/**
@@ -112,7 +118,7 @@ private function executeQuery($address)
112118
$uri = sprintf('file://geoip?%s', $address);
113119

114120
try {
115-
$result = $this->getAdapter()
121+
$result = $this->adapter
116122
->setLocale($this->locale)
117123
->getContent($uri);
118124
} catch (AddressNotFoundException $e) {

tests/Geocoder/Tests/Model/AddressFactoryTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function testCreateFromArray()
3333
$i = 1;
3434
foreach ($addresses as $address) {
3535
$this->assertInstanceOf('Geocoder\Model\Address', $address);
36-
$this->assertInstanceOf('Geocoder\Model\Coordinates', $address->getCoordinates());
36+
$this->assertNull($address->getCoordinates());
3737
$this->assertInstanceOf('Geocoder\Model\County', $address->getCounty());
3838
$this->assertInstanceOf('Geocoder\Model\Country', $address->getCountry());
3939
$this->assertInstanceOf('Geocoder\Model\Region', $address->getRegion());
@@ -54,6 +54,6 @@ public function testFormatStringWithLeadingNumeral()
5454
]);
5555
$address = current($addresses);
5656

57-
$this->assertEquals('1st Ave 1A', $address->getStreetName());
57+
$this->assertEquals('1st ave 1A', $address->getStreetName());
5858
}
5959
}

tests/Geocoder/Tests/Provider/BingMapsTest.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public function testGeocodeReturnsMultipleResults()
109109
$this->assertEquals(75020, $result->getPostalCode());
110110
$this->assertEquals('Paris', $result->getLocality());
111111
$this->assertEquals('Paris', $result->getCounty()->getName());
112-
$this->assertEquals('Idf', $result->getRegion()->getName());
112+
$this->assertEquals('IdF', $result->getRegion()->getName());
113113
$this->assertEquals('France', $result->getCountry()->getName());
114114

115115
$this->assertNull($result->getCountry()->getCode());
@@ -130,7 +130,7 @@ public function testGeocodeReturnsMultipleResults()
130130
$this->assertEquals(92120, $result->getPostalCode());
131131
$this->assertEquals('Montrouge', $result->getLocality());
132132
$this->assertEquals('Hauts-de-Seine', $result->getCounty()->getName());
133-
$this->assertEquals('Idf', $result->getRegion()->getName());
133+
$this->assertEquals('IdF', $result->getRegion()->getName());
134134
$this->assertEquals('France', $result->getCountry()->getName());
135135

136136
/** @var \Geocoder\Model\Address $result */
@@ -147,8 +147,8 @@ public function testGeocodeReturnsMultipleResults()
147147
$this->assertEquals('10 Avenue Gambetta', $result->getStreetName());
148148
$this->assertEquals(94700, $result->getPostalCode());
149149
$this->assertEquals('Maisons-Alfort', $result->getLocality());
150-
$this->assertEquals('Val-de-Marne', $result->getCounty()->getName());
151-
$this->assertEquals('Idf', $result->getRegion()->getName());
150+
$this->assertEquals('Val-De-Marne', $result->getCounty()->getName());
151+
$this->assertEquals('IdF', $result->getRegion()->getName());
152152
$this->assertEquals('France', $result->getCountry()->getName());
153153
}
154154

@@ -179,7 +179,7 @@ public function testReverseReturnsSingleResult()
179179
$this->assertEquals(75020, $result->getPostalCode());
180180
$this->assertEquals('20e Arrondissement', $result->getLocality());
181181
$this->assertEquals('Paris', $result->getCounty()->getName());
182-
$this->assertEquals('Idf', $result->getRegion()->getName());
182+
$this->assertEquals('IdF', $result->getRegion()->getName());
183183
$this->assertEquals('France', $result->getCountry()->getName());
184184

185185
$this->assertNull($result->getCountry()->getCode());
@@ -213,7 +213,7 @@ public function testGeocodeWithRealAddressReturnsMultipleResults()
213213
$this->assertEquals(75020, $result->getPostalCode());
214214
$this->assertEquals('Paris', $result->getLocality());
215215
$this->assertEquals('Paris', $result->getCounty()->getName());
216-
$this->assertEquals('Idf', $result->getRegion()->getName());
216+
$this->assertEquals('IdF', $result->getRegion()->getName());
217217
$this->assertEquals('France', $result->getCountry()->getName());
218218

219219
$this->assertNull($result->getCountry()->getCode());
@@ -234,7 +234,7 @@ public function testGeocodeWithRealAddressReturnsMultipleResults()
234234
$this->assertEquals(92120, $result->getPostalCode());
235235
$this->assertEquals('Montrouge', $result->getLocality());
236236
$this->assertEquals('Hauts-de-Seine', $result->getCounty()->getName());
237-
$this->assertEquals('Idf', $result->getRegion()->getName());
237+
$this->assertEquals('IdF', $result->getRegion()->getName());
238238
$this->assertEquals('France', $result->getCountry()->getName());
239239

240240
/** @var \Geocoder\Model\Address $result */
@@ -252,7 +252,7 @@ public function testGeocodeWithRealAddressReturnsMultipleResults()
252252
$this->assertEquals(94700, $result->getPostalCode());
253253
$this->assertEquals('Maisons-Alfort', $result->getLocality());
254254
$this->assertEquals('Val-de-Marne', $result->getCounty()->getName());
255-
$this->assertEquals('Idf', $result->getRegion()->getName());
255+
$this->assertEquals('IdF', $result->getRegion()->getName());
256256
$this->assertEquals('France', $result->getCountry()->getName());
257257
}
258258

@@ -303,7 +303,7 @@ public function testReverseWithRealCoordinatesReturnsSingleResult()
303303
$this->assertEquals(75020, $result->getPostalCode());
304304
$this->assertEquals('20e Arrondissement', $result->getLocality());
305305
$this->assertEquals('Paris', $result->getCounty()->getName());
306-
$this->assertEquals('Idf', $result->getRegion()->getName());
306+
$this->assertEquals('IdF', $result->getRegion()->getName());
307307
$this->assertEquals('France', $result->getCountry()->getName());
308308

309309
$this->assertNull($result->getCountry()->getCode());

tests/Geocoder/Tests/Provider/GeoIP2Test.php

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@ public function setUp()
3131

3232
public function testGetName()
3333
{
34-
$expectedName = 'maxmind_geoip2';
35-
$this->assertEquals($expectedName, $this->provider->getName());
34+
$this->assertEquals('geoip2', $this->provider->getName());
3635
}
3736

3837
/**
3938
* @expectedException \Geocoder\Exception\UnsupportedOperation
40-
* @expectedExceptionMessage The Geocoder\Provider\GeoIP2 is not able to do reverse geocoding.
39+
* @expectedExceptionMessage The GeoIP2 provider is not able to do reverse geocoding.
4140
*/
4241
public function testQueryingReverseLeadsToException()
4342
{
@@ -62,7 +61,7 @@ public function testGeocodeWithLocalhostIPv4()
6261

6362
/**
6463
* @expectedException \Geocoder\Exception\UnsupportedOperation
65-
* @expectedExceptionMessage The Geocoder\Provider\GeoIP2 does not support street addresses.
64+
* @expectedExceptionMessage The GeoIP2 provider does not support street addresses, only IP addresses.
6665
*/
6766
public function testOnlyIpAddressesCouldBeResolved()
6867
{
@@ -153,11 +152,11 @@ public function testRetrievingGeodata($address, $adapterResponse, $expectedGeoda
153152
$this->assertEquals($expectedGeodata['subLocality'], $result->getSubLocality());
154153
$this->assertEquals($expectedGeodata['postalCode'], $result->getPostalCode());
155154
$this->assertEquals($expectedGeodata['county'], $result->getCounty()->getName());
156-
$this->assertEquals($expectedGeodata['countyCode'], $result->getCounty()->getName());
155+
$this->assertEquals($expectedGeodata['countyCode'], $result->getCounty()->getCode());
157156
$this->assertEquals($expectedGeodata['region'], $result->getRegion()->getName());
158-
$this->assertEquals($expectedGeodata['regionCode'], $result->getRegion()->getName());
157+
$this->assertEquals($expectedGeodata['regionCode'], $result->getRegion()->getCode());
159158
$this->assertEquals($expectedGeodata['country'], $result->getCountry()->getName());
160-
$this->assertEquals($expectedGeodata['countryCode'], $result->getCountry()->getName());
159+
$this->assertEquals($expectedGeodata['countryCode'], $result->getCountry()->getCode());
161160
$this->assertEquals($expectedGeodata['timezone'], $result->getTimezone());
162161
}
163162

tests/Geocoder/Tests/Provider/GeoIPsTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,11 @@ public function testGeocodeWithRealIPv4GetsFakeContent()
183183
$this->assertEquals(-111.6073, $result->getLongitude(), '', 0.0001);
184184
$this->assertNull($result->getStreetName());
185185
$this->assertNull($result->getPostalCode());
186-
$this->assertEquals('Provo', $result->getLocality());
187-
$this->assertEquals('Utah', $result->getCounty()->getName());
188-
$this->assertEquals('Utah', $result->getRegion()->getName());
186+
$this->assertEquals('PROVO', $result->getLocality());
187+
$this->assertEquals('UTAH', $result->getCounty()->getName());
188+
$this->assertEquals('UTAH', $result->getRegion()->getName());
189189
$this->assertEquals('UT',$result->getRegion()->getCode());
190-
$this->assertEquals('United States', $result->getCountry()->getName());
190+
$this->assertEquals('UNITED STATES', $result->getCountry()->getName());
191191
$this->assertEquals('US',$result->getCountry()->getCode());
192192
$this->assertEquals('MST', $result->getTimezone());
193193
}

tests/Geocoder/Tests/Provider/HostIpTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public function testGeocodeWithRealIPv4()
111111
$this->assertNull($result->getPostalCode());
112112
$this->assertEquals('Aulnat', $result->getLocality());
113113
$this->assertNull($result->getRegion()->getName());
114-
$this->assertEquals('France', $result->getCountry()->getName());
114+
$this->assertEquals('FRANCE', $result->getCountry()->getName());
115115
$this->assertEquals('FR', $result->getCountry()->getCode());
116116
}
117117

0 commit comments

Comments
 (0)