diff --git a/.gitignore b/.gitignore index 2823a707..8280c955 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ /bin /composer.lock /vendor +/composer.phar # PHPUnit /phpunit.xml diff --git a/composer.json b/composer.json index c8181ac8..3041f75f 100644 --- a/composer.json +++ b/composer.json @@ -10,14 +10,14 @@ } ], "require": { - "php": ">=5.3.0", - "egeloen/json-builder": "~1.0.0" + "php": ">=5.5.9", + "egeloen/json-builder": "~2.0.1" }, "require-dev": { - "phpunit/phpunit": "~4.0", + "phpunit/phpunit": "5.3.*", "widop/http-adapter": "~1.1.0", - "willdurand/geocoder": "~2.0", - "satooshi/php-coveralls": "~0.6" + "willdurand/geocoder": "v3.3.*", + "satooshi/php-coveralls": "~1.0.1" }, "suggest": { "widop/http-adapter": "Allows to use services", diff --git a/src/Services/Geocoding/GeocoderProvider.php b/src/Services/Geocoding/GeocoderProvider.php index 36e9b32b..3ac03ae6 100644 --- a/src/Services/Geocoding/GeocoderProvider.php +++ b/src/Services/Geocoding/GeocoderProvider.php @@ -11,9 +11,8 @@ namespace Ivory\GoogleMap\Services\Geocoding; -use Geocoder\HttpAdapter\HttpAdapterInterface; -use Geocoder\Provider\AbstractProvider; -use Geocoder\Provider\ProviderInterface; +use Geocoder\Provider\AbstractHttpProvider; +use Geocoder\Provider\LocaleAwareProvider; use Ivory\GoogleMap\Base\Bound; use Ivory\GoogleMap\Base\Coordinate; use Ivory\GoogleMap\Exception\GeocodingException; @@ -23,13 +22,16 @@ use Ivory\GoogleMap\Services\Geocoding\Result\GeocoderResponse; use Ivory\GoogleMap\Services\Geocoding\Result\GeocoderResult; use Ivory\GoogleMap\Services\Utils\XmlParser; +use Ivory\HttpAdapter\HttpAdapterInterface; +use Ivory\HttpAdapter\Message\InternalRequest; +use Ivory\HttpAdapter\Message\Request; /** * Geocoder provider. * * @author GeLo */ -class GeocoderProvider extends AbstractProvider implements ProviderInterface +class GeocoderProvider extends AbstractHttpProvider implements LocaleAwareProvider { /** @var string */ protected $url; @@ -46,17 +48,21 @@ class GeocoderProvider extends AbstractProvider implements ProviderInterface /** @var \Ivory\GoogleMap\Services\BusinessAccount */ protected $businessAccount; + /** @var string|null */ + protected $locale; + /** * {@inheritdoc} */ public function __construct(HttpAdapterInterface $adapter, $locale = null) { - parent::__construct($adapter, $locale); + parent::__construct($adapter); $this->setUrl('http://maps.googleapis.com/maps/api/geocode'); $this->setHttps(false); $this->setFormat('json'); $this->setXmlParser(new XmlParser()); + $this->setLocale($locale); } /** @@ -212,7 +218,9 @@ public function getGeocodedData($request) } $url = $this->generateUrl($geocoderRequest); - $response = $this->getAdapter()->getContent($url); + $request = new Request($url, 'get'); + + $response = $this->getAdapter()->sendRequest($request); if ($response === null) { throw GeocodingException::invalidServiceResult(); @@ -314,10 +322,10 @@ protected function signUrl($url) protected function parse($response) { if ($this->format == 'json') { - return $this->parseJSON($response); + return $this->parseJSON($response->getBody()->__toString()); } - return $this->parseXML($response); + return $this->parseXML($response->getBody()->__toString()); } /** @@ -453,4 +461,32 @@ protected function buildGeocoderGeometry(\stdClass $geocoderGeometry) return new GeocoderGeometry($location, $locationType, $viewport, $bound); } + + /** + * {@inheritDoc} + */ + public function getLocale() + { + return $this->locale; + } + + /** + * {@inheritDoc} + */ + public function setLocale($locale) + { + $this->locale = $locale; + + return $this; + } + + public function geocode($value) + { + // TODO: Implement geocode() method. + } + + public function reverse($latitude, $longitude) + { + // TODO: Implement reverse() method. + } } diff --git a/tests/Services/Geocoding/GeocoderProviderTest.php b/tests/Services/Geocoding/GeocoderProviderTest.php index f4990ad7..a2aa09da 100644 --- a/tests/Services/Geocoding/GeocoderProviderTest.php +++ b/tests/Services/Geocoding/GeocoderProviderTest.php @@ -11,10 +11,12 @@ namespace Ivory\Tests\GoogleMap\Services\Geocoding; -use Geocoder\HttpAdapter\CurlHttpAdapter; use Ivory\GoogleMap\Services\Geocoding\GeocoderProvider; use Ivory\GoogleMap\Services\Geocoding\GeocoderRequest; use Ivory\GoogleMap\Services\Geocoding\Result\GeocoderStatus; +use Ivory\HttpAdapter\BuzzHttpAdapter; +use Ivory\HttpAdapter\CurlHttpAdapter; +use Ivory\HttpAdapter\Guzzle6HttpAdapter; /** * Geocoder provider test. @@ -219,7 +221,7 @@ public function testGeocodedDataWithInvalidResult() $httpAdapterMock = $this->getMock('Geocoder\HttpAdapter\HttpAdapterInterface'); $httpAdapterMock ->expects($this->once()) - ->method('getContent') + ->method('sendRequest') ->will($this->returnValue(null)); $this->geocoderProvider = new GeocoderProvider($httpAdapterMock);