From d14967026d9443a38ec78fc3e3288549e4491d69 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 26 May 2017 16:25:53 +0200 Subject: [PATCH 1/5] Added Address::ProvidedBy --- src/Common/Location.php | 7 +++ src/Common/Model/Address.php | 41 +++++++++++----- ...LocationBuilder.php => AddressBuilder.php} | 49 ++++++++++++------- src/Common/Model/LocationFactory.php | 3 +- src/Common/Tests/Dumper/GeoArrayTest.php | 13 +++-- src/Common/Tests/Dumper/GeoJsonTest.php | 13 +++-- src/Common/Tests/Model/AddressTest.php | 5 +- src/Provider/GoogleMaps/GoogleMaps.php | 8 +-- src/Provider/Yandex/Yandex.php | 4 +- 9 files changed, 100 insertions(+), 43 deletions(-) rename src/Common/Model/{LocationBuilder.php => AddressBuilder.php} (84%) diff --git a/src/Common/Location.php b/src/Common/Location.php index 84d5d6bad..5d9b9e44d 100644 --- a/src/Common/Location.php +++ b/src/Common/Location.php @@ -106,4 +106,11 @@ public function getTimezone(); * @return array */ public function toArray(): array; + + /** + * The name of the provider that created this Location. + * + * @return string + */ + public function getProvidedBy(): string; } diff --git a/src/Common/Model/Address.php b/src/Common/Model/Address.php index 861b40d8b..38bf67339 100644 --- a/src/Common/Model/Address.php +++ b/src/Common/Model/Address.php @@ -70,18 +70,26 @@ class Address implements Location private $timezone; /** - * @param Coordinates|null $coordinates - * @param Bounds|null $bounds - * @param string|null $streetNumber - * @param string|null $streetName - * @param string|null $postalCode - * @param string|null $locality - * @param string|null $subLocality - * @param AdminLevelCollection|null $adminLevels - * @param Country|null $country - * @param string|null $timezone + * @var string + */ + private $providedBy; + + /** + * @param string $providedBy + * @param AdminLevelCollection $adminLevels + * @param Coordinates|null $coordinates + * @param Bounds|null $bounds + * @param string|null $streetNumber + * @param string|null $streetName + * @param string|null $postalCode + * @param string|null $locality + * @param string|null $subLocality + * @param Country|null $country + * @param string|null $timezone */ public function __construct( + string $providedBy, + AdminLevelCollection $adminLevels, Coordinates $coordinates = null, Bounds $bounds = null, string $streetNumber = null, @@ -89,10 +97,11 @@ public function __construct( string $postalCode = null, string $locality = null, string $subLocality = null, - AdminLevelCollection $adminLevels = null, Country $country = null, string $timezone = null ) { + $this->providedBy = $providedBy; + $this->adminLevels = $adminLevels; $this->coordinates = $coordinates; $this->bounds = $bounds; $this->streetNumber = $streetNumber; @@ -100,11 +109,18 @@ public function __construct( $this->postalCode = $postalCode; $this->locality = $locality; $this->subLocality = $subLocality; - $this->adminLevels = $adminLevels ?: new AdminLevelCollection(); $this->country = $country; $this->timezone = $timezone; } + /** + * @return string + */ + public function getProvidedBy(): string + { + return $this->providedBy; + } + /** * {@inheritdoc} */ @@ -317,6 +333,7 @@ public function toArray(): array ]; return [ + 'providedBy' => $this->providedBy, 'latitude' => $lat, 'longitude' => $lon, 'bounds' => null !== $this->bounds ? $this->bounds->toArray() : $noBounds, diff --git a/src/Common/Model/LocationBuilder.php b/src/Common/Model/AddressBuilder.php similarity index 84% rename from src/Common/Model/LocationBuilder.php rename to src/Common/Model/AddressBuilder.php index cb3c29359..441c4a561 100644 --- a/src/Common/Model/LocationBuilder.php +++ b/src/Common/Model/AddressBuilder.php @@ -19,8 +19,13 @@ * * @author Tobias Nyholm */ -final class LocationBuilder +final class AddressBuilder { + /** + * @var string + */ + private $providedBy; + /** * @var Coordinates|null */ @@ -76,18 +81,29 @@ final class LocationBuilder */ private $timezone; + /** + * + * @param string $providedBy + */ + public function __construct(string $providedBy) + { + $this->providedBy = $providedBy; + } + /** * @param string $class * - * @return Location + * @return Address */ public function build($class = Address::class) { - if (!is_a($class, Location::class, true)) { - throw new \LogicException('First parameter to LocationBuilder::build must be a class name implementing Geocoder\Location'); + if (!is_a($class, Address::class, true)) { + throw new \LogicException('First parameter to LocationBuilder::build must be a class name extending Geocoder\Model\Address'); } return new $class( + $this->providedBy, + new AdminLevelCollection($this->adminLevels), $this->coordinates, $this->bounds, $this->streetNumber, @@ -95,7 +111,6 @@ public function build($class = Address::class) $this->postalCode, $this->locality, $this->subLocality, - new AdminLevelCollection($this->adminLevels), new Country($this->country, $this->countryCode), $this->timezone ); @@ -107,7 +122,7 @@ public function build($class = Address::class) * @param float $north * @param float $east * - * @return LocationBuilder + * @return AddressBuilder */ public function setBounds($south, $west, $north, $east) { @@ -124,7 +139,7 @@ public function setBounds($south, $west, $north, $east) * @param float $latitude * @param float $longitude * - * @return LocationBuilder + * @return AddressBuilder */ public function setCoordinates($latitude, $longitude) { @@ -142,7 +157,7 @@ public function setCoordinates($latitude, $longitude) * @param string $name * @param string $code * - * @return LocationBuilder + * @return AddressBuilder */ public function addAdminLevel($level, $name, $code) { @@ -154,7 +169,7 @@ public function addAdminLevel($level, $name, $code) /** * @param null|string $streetNumber * - * @return LocationBuilder + * @return AddressBuilder */ public function setStreetNumber($streetNumber) { @@ -166,7 +181,7 @@ public function setStreetNumber($streetNumber) /** * @param null|string $streetName * - * @return LocationBuilder + * @return AddressBuilder */ public function setStreetName($streetName) { @@ -178,7 +193,7 @@ public function setStreetName($streetName) /** * @param null|string $locality * - * @return LocationBuilder + * @return AddressBuilder */ public function setLocality($locality) { @@ -190,7 +205,7 @@ public function setLocality($locality) /** * @param null|string $postalCode * - * @return LocationBuilder + * @return AddressBuilder */ public function setPostalCode($postalCode) { @@ -202,7 +217,7 @@ public function setPostalCode($postalCode) /** * @param null|string $subLocality * - * @return LocationBuilder + * @return AddressBuilder */ public function setSubLocality($subLocality) { @@ -214,7 +229,7 @@ public function setSubLocality($subLocality) /** * @param array $adminLevels * - * @return LocationBuilder + * @return AddressBuilder */ public function setAdminLevels($adminLevels) { @@ -226,7 +241,7 @@ public function setAdminLevels($adminLevels) /** * @param null|string $country * - * @return LocationBuilder + * @return AddressBuilder */ public function setCountry($country) { @@ -238,7 +253,7 @@ public function setCountry($country) /** * @param null|string $countryCode * - * @return LocationBuilder + * @return AddressBuilder */ public function setCountryCode($countryCode) { @@ -250,7 +265,7 @@ public function setCountryCode($countryCode) /** * @param null|string $timezone * - * @return LocationBuilder + * @return AddressBuilder */ public function setTimezone($timezone) { diff --git a/src/Common/Model/LocationFactory.php b/src/Common/Model/LocationFactory.php index d11fcdf53..5ec38de80 100644 --- a/src/Common/Model/LocationFactory.php +++ b/src/Common/Model/LocationFactory.php @@ -47,6 +47,8 @@ public static function createLocation(array $data, $class = Address::class) } $address = new $class( + 'n/a', + new AdminLevelCollection($adminLevels), self::createCoordinates( self::readDoubleValue($data, 'latitude'), self::readDoubleValue($data, 'longitude') @@ -62,7 +64,6 @@ public static function createLocation(array $data, $class = Address::class) self::readStringValue($data, 'postalCode'), self::readStringValue($data, 'locality'), self::readStringValue($data, 'subLocality'), - new AdminLevelCollection($adminLevels), new Country( self::readStringValue($data, 'country'), self::upperize(\igorw\get_in($data, ['countryCode'])) diff --git a/src/Common/Tests/Dumper/GeoArrayTest.php b/src/Common/Tests/Dumper/GeoArrayTest.php index a57fded74..f9e71534d 100644 --- a/src/Common/Tests/Dumper/GeoArrayTest.php +++ b/src/Common/Tests/Dumper/GeoArrayTest.php @@ -40,7 +40,9 @@ public function testDump() 'type' => 'Point', 'coordinates' => [0, 0], ], - 'properties' => null, + 'properties' => [ + 'providedBy' => 'n/a' + ], ]; $result = $this->dumper->dump($address); @@ -62,7 +64,9 @@ public function testDumpWithData() 'type' => 'Point', 'coordinates' => [2.3889114, 48.8631507], ], - 'properties' => null, + 'properties' => [ + 'providedBy' => 'n/a' + ], ]; $result = $this->dumper->dump($address); @@ -90,7 +94,9 @@ public function testDumpWithBounds() 'type' => 'Point', 'coordinates' => [2.3889114, 48.8631507], ], - 'properties' => null, + 'properties' => [ + 'providedBy' => 'n/a' + ], 'bounds' => [ 'south' => 48.8631507, 'west' => 2.3889114, @@ -129,6 +135,7 @@ public function testDumpWithProperties() 'properties' => [ 'locality' => 'Paris', 'country' => 'France', + 'providedBy' => 'n/a' ], 'bounds' => [ 'south' => 48.8631507, diff --git a/src/Common/Tests/Dumper/GeoJsonTest.php b/src/Common/Tests/Dumper/GeoJsonTest.php index 0486a4bc0..914e3ab77 100644 --- a/src/Common/Tests/Dumper/GeoJsonTest.php +++ b/src/Common/Tests/Dumper/GeoJsonTest.php @@ -41,7 +41,9 @@ public function testDump() 'type' => 'Point', 'coordinates' => [0, 0], ], - 'properties' => null, + 'properties' => [ + 'providedBy' => 'n/a' + ], ]; $result = $this->dumper->dump($address); @@ -63,7 +65,9 @@ public function testDumpWithData() 'type' => 'Point', 'coordinates' => [2.3889114, 48.8631507], ], - 'properties' => null, + 'properties' => [ + 'providedBy' => 'n/a' + ], ]; $result = $this->dumper->dump($address); @@ -91,7 +95,9 @@ public function testDumpWithBounds() 'type' => 'Point', 'coordinates' => [2.3889114, 48.8631507], ], - 'properties' => null, + 'properties' => [ + 'providedBy' => 'n/a' + ], 'bounds' => [ 'south' => 48.8631507, 'west' => 2.3889114, @@ -130,6 +136,7 @@ public function testDumpWithProperties() 'properties' => [ 'locality' => 'Paris', 'country' => 'France', + 'providedBy' => 'n/a', ], 'bounds' => [ 'south' => 48.8631507, diff --git a/src/Common/Tests/Model/AddressTest.php b/src/Common/Tests/Model/AddressTest.php index ad1c2e7c1..024877a2d 100644 --- a/src/Common/Tests/Model/AddressTest.php +++ b/src/Common/Tests/Model/AddressTest.php @@ -13,6 +13,7 @@ namespace Geocoder\Tests\Model; use Geocoder\Model\Address; +use Geocoder\Model\AdminLevelCollection; use Geocoder\Model\LocationFactory; use PHPUnit\Framework\TestCase; @@ -24,6 +25,7 @@ class AddressTest extends TestCase public function testDumpEmptyAddress() { $expected = [ + 'providedBy' => 'n/a', 'latitude' => null, 'longitude' => null, 'bounds' => [ @@ -43,13 +45,14 @@ public function testDumpEmptyAddress() 'timezone' => null, ]; - $address = new Address(); + $address = new Address('n/a', new AdminLevelCollection()); $this->assertEquals($address->toArray(), $expected); } public function testToArray() { $data = [ + 'providedBy' => 'n/a', 'latitude' => 48.8631507, 'longitude' => 2.3889114, 'bounds' => [ diff --git a/src/Provider/GoogleMaps/GoogleMaps.php b/src/Provider/GoogleMaps/GoogleMaps.php index f4d626906..494b466f9 100644 --- a/src/Provider/GoogleMaps/GoogleMaps.php +++ b/src/Provider/GoogleMaps/GoogleMaps.php @@ -19,7 +19,7 @@ use Geocoder\Exception\QuotaExceeded; use Geocoder\Exception\UnsupportedOperation; use Geocoder\Model\AddressCollection; -use Geocoder\Model\LocationBuilder; +use Geocoder\Model\AddressBuilder; use Geocoder\Query\GeocodeQuery; use Geocoder\Query\ReverseQuery; use Geocoder\Provider\AbstractHttpProvider; @@ -216,7 +216,7 @@ private function fetchUrl($url, $locale, $limit, $region) $results = []; foreach ($json->results as $result) { - $builder = new LocationBuilder(); + $builder = new AddressBuilder($this->getName()); // update address components foreach ($result->address_components as $component) { @@ -270,11 +270,11 @@ private function fetchUrl($url, $locale, $limit, $region) /** * Update current resultSet with given key/value. * - * @param LocationBuilder $builder + * @param AddressBuilder $builder * @param string $type Component type * @param object $values The component values */ - private function updateAddressComponent(LocationBuilder $builder, $type, $values) + private function updateAddressComponent(AddressBuilder $builder, $type, $values) { switch ($type) { case 'postal_code': diff --git a/src/Provider/Yandex/Yandex.php b/src/Provider/Yandex/Yandex.php index 0101fa195..9c3b60f5c 100644 --- a/src/Provider/Yandex/Yandex.php +++ b/src/Provider/Yandex/Yandex.php @@ -15,7 +15,7 @@ use Geocoder\Collection; use Geocoder\Exception\UnsupportedOperation; use Geocoder\Model\AddressCollection; -use Geocoder\Model\LocationBuilder; +use Geocoder\Model\AddressBuilder; use Geocoder\Provider\Yandex\Model\YandexAddress; use Geocoder\Query\GeocodeQuery; use Geocoder\Query\ReverseQuery; @@ -121,7 +121,7 @@ private function executeQuery($url, $locale, $limit) $locations = []; foreach ($data as $item) { - $builder = new LocationBuilder(); + $builder = new AddressBuilder($this->getName()); $bounds = null; $flatArray = ['pos' => ' ']; From 2074f42bd525310b5a4241e97634d5b2e09402de Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 26 May 2017 16:29:04 +0200 Subject: [PATCH 2/5] Bugfix --- src/Common/Model/Address.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Common/Model/Address.php b/src/Common/Model/Address.php index 38bf67339..b4fe464da 100644 --- a/src/Common/Model/Address.php +++ b/src/Common/Model/Address.php @@ -211,6 +211,7 @@ public function getTimezone() public static function createFromArray(array $data) { $defaults = [ + 'providedBy' => 'n/a', 'latitude' => null, 'longitude' => null, 'bounds' => [ @@ -242,6 +243,8 @@ public static function createFromArray(array $data) } return new static( + $data['providedBy'], + new AdminLevelCollection($adminLevels), self::createCoordinates( $data['latitude'], $data['longitude'] @@ -257,7 +260,6 @@ public static function createFromArray(array $data) $data['postalCode'], $data['locality'], $data['subLocality'], - new AdminLevelCollection($adminLevels), new Country( $data['country'], $data['countryCode'] From acd8df1304d7b95192d6263255b1fe55b1789f92 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 26 May 2017 16:29:48 +0200 Subject: [PATCH 3/5] cs --- src/Common/Model/AddressBuilder.php | 1 - src/Common/Tests/Dumper/GeoArrayTest.php | 8 ++++---- src/Common/Tests/Dumper/GeoJsonTest.php | 6 +++--- src/Provider/GoogleMaps/GoogleMaps.php | 4 ++-- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Common/Model/AddressBuilder.php b/src/Common/Model/AddressBuilder.php index 441c4a561..733d3535d 100644 --- a/src/Common/Model/AddressBuilder.php +++ b/src/Common/Model/AddressBuilder.php @@ -82,7 +82,6 @@ final class AddressBuilder private $timezone; /** - * * @param string $providedBy */ public function __construct(string $providedBy) diff --git a/src/Common/Tests/Dumper/GeoArrayTest.php b/src/Common/Tests/Dumper/GeoArrayTest.php index f9e71534d..67e71de86 100644 --- a/src/Common/Tests/Dumper/GeoArrayTest.php +++ b/src/Common/Tests/Dumper/GeoArrayTest.php @@ -41,7 +41,7 @@ public function testDump() 'coordinates' => [0, 0], ], 'properties' => [ - 'providedBy' => 'n/a' + 'providedBy' => 'n/a', ], ]; @@ -65,7 +65,7 @@ public function testDumpWithData() 'coordinates' => [2.3889114, 48.8631507], ], 'properties' => [ - 'providedBy' => 'n/a' + 'providedBy' => 'n/a', ], ]; @@ -95,7 +95,7 @@ public function testDumpWithBounds() 'coordinates' => [2.3889114, 48.8631507], ], 'properties' => [ - 'providedBy' => 'n/a' + 'providedBy' => 'n/a', ], 'bounds' => [ 'south' => 48.8631507, @@ -135,7 +135,7 @@ public function testDumpWithProperties() 'properties' => [ 'locality' => 'Paris', 'country' => 'France', - 'providedBy' => 'n/a' + 'providedBy' => 'n/a', ], 'bounds' => [ 'south' => 48.8631507, diff --git a/src/Common/Tests/Dumper/GeoJsonTest.php b/src/Common/Tests/Dumper/GeoJsonTest.php index 914e3ab77..2281a0b2a 100644 --- a/src/Common/Tests/Dumper/GeoJsonTest.php +++ b/src/Common/Tests/Dumper/GeoJsonTest.php @@ -42,7 +42,7 @@ public function testDump() 'coordinates' => [0, 0], ], 'properties' => [ - 'providedBy' => 'n/a' + 'providedBy' => 'n/a', ], ]; @@ -66,7 +66,7 @@ public function testDumpWithData() 'coordinates' => [2.3889114, 48.8631507], ], 'properties' => [ - 'providedBy' => 'n/a' + 'providedBy' => 'n/a', ], ]; @@ -96,7 +96,7 @@ public function testDumpWithBounds() 'coordinates' => [2.3889114, 48.8631507], ], 'properties' => [ - 'providedBy' => 'n/a' + 'providedBy' => 'n/a', ], 'bounds' => [ 'south' => 48.8631507, diff --git a/src/Provider/GoogleMaps/GoogleMaps.php b/src/Provider/GoogleMaps/GoogleMaps.php index 494b466f9..40ae021a9 100644 --- a/src/Provider/GoogleMaps/GoogleMaps.php +++ b/src/Provider/GoogleMaps/GoogleMaps.php @@ -271,8 +271,8 @@ private function fetchUrl($url, $locale, $limit, $region) * Update current resultSet with given key/value. * * @param AddressBuilder $builder - * @param string $type Component type - * @param object $values The component values + * @param string $type Component type + * @param object $values The component values */ private function updateAddressComponent(AddressBuilder $builder, $type, $values) { From b8ef06e257c19ee9c0ddfd94ebb9fc9fcce1ef3d Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Thu, 1 Jun 2017 16:39:34 +0200 Subject: [PATCH 4/5] fixes --- src/Provider/BingMaps/BingMaps.php | 3 ++- src/Provider/FreeGeoIp/FreeGeoIp.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Provider/BingMaps/BingMaps.php b/src/Provider/BingMaps/BingMaps.php index af7b8deb2..4243a68a2 100644 --- a/src/Provider/BingMaps/BingMaps.php +++ b/src/Provider/BingMaps/BingMaps.php @@ -15,6 +15,7 @@ use Geocoder\Collection; use Geocoder\Exception\InvalidCredentials; use Geocoder\Exception\UnsupportedOperation; +use Geocoder\Model\AddressBuilder; use Geocoder\Model\AddressCollection; use Geocoder\Model\LocationBuilder; use Geocoder\Query\GeocodeQuery; @@ -121,7 +122,7 @@ private function executeQuery($url, $locale, $limit) $results = []; foreach ($data as $item) { - $builder = new LocationBuilder(); + $builder = new AddressBuilder($this->getName()); $coordinates = (array) $item->geocodePoints[0]->coordinates; $builder->setCoordinates($coordinates[0], $coordinates[1]); diff --git a/src/Provider/FreeGeoIp/FreeGeoIp.php b/src/Provider/FreeGeoIp/FreeGeoIp.php index db289886b..05da7bf46 100644 --- a/src/Provider/FreeGeoIp/FreeGeoIp.php +++ b/src/Provider/FreeGeoIp/FreeGeoIp.php @@ -15,6 +15,7 @@ use Geocoder\Collection; use Geocoder\Exception\UnsupportedOperation; use Geocoder\Model\Address; +use Geocoder\Model\AddressBuilder; use Geocoder\Model\AddressCollection; use Geocoder\Model\LocationBuilder; use Geocoder\Query\GeocodeQuery; @@ -52,7 +53,7 @@ public function geocodeQuery(GeocodeQuery $query): Collection $content = $this->getUrlContents(sprintf(self::ENDPOINT_URL, $address)); $data = json_decode($content, true); - $builder = new LocationBuilder(); + $builder = new AddressBuilder($this->getName()); if (!empty($data['region_name']) || !empty($data['region_code'])) { $builder->addAdminLevel(1, $data['region_name'] ?? null, $data['region_code'] ?? null); From 4e51da2301ea6cf7e217b92cd18580fe2c01aa55 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Thu, 1 Jun 2017 16:41:04 +0200 Subject: [PATCH 5/5] cs --- src/Provider/BingMaps/BingMaps.php | 1 - src/Provider/FreeGeoIp/FreeGeoIp.php | 1 - 2 files changed, 2 deletions(-) diff --git a/src/Provider/BingMaps/BingMaps.php b/src/Provider/BingMaps/BingMaps.php index 4243a68a2..2d9b95ec8 100644 --- a/src/Provider/BingMaps/BingMaps.php +++ b/src/Provider/BingMaps/BingMaps.php @@ -17,7 +17,6 @@ use Geocoder\Exception\UnsupportedOperation; use Geocoder\Model\AddressBuilder; use Geocoder\Model\AddressCollection; -use Geocoder\Model\LocationBuilder; use Geocoder\Query\GeocodeQuery; use Geocoder\Query\ReverseQuery; use Geocoder\Provider\AbstractHttpProvider; diff --git a/src/Provider/FreeGeoIp/FreeGeoIp.php b/src/Provider/FreeGeoIp/FreeGeoIp.php index 05da7bf46..e8c14a57d 100644 --- a/src/Provider/FreeGeoIp/FreeGeoIp.php +++ b/src/Provider/FreeGeoIp/FreeGeoIp.php @@ -17,7 +17,6 @@ use Geocoder\Model\Address; use Geocoder\Model\AddressBuilder; use Geocoder\Model\AddressCollection; -use Geocoder\Model\LocationBuilder; use Geocoder\Query\GeocodeQuery; use Geocoder\Query\ReverseQuery; use Geocoder\Provider\AbstractHttpProvider;