From 4af14839f3dfe45b39ff7433ea39b1a287a879b2 Mon Sep 17 00:00:00 2001 From: Ilya Shtricul Date: Tue, 22 Dec 2015 08:57:09 +0300 Subject: [PATCH 1/8] Update version of geocoder --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index d959567..798768a 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ "require" : { "php" : ">=5.4", "illuminate/support" : "~5.0", - "willdurand/geocoder" : "~2.4" + "willdurand/geocoder" : "~3.0" }, "require-dev" : { From 2ac108c78472b072d3e67fa0040059bc21fea9b5 Mon Sep 17 00:00:00 2001 From: Ilya Shtricul Date: Tue, 22 Dec 2015 09:28:20 +0300 Subject: [PATCH 2/8] Register all providers Not only chain provider registration --- src/GeocoderServiceProvider.php | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/GeocoderServiceProvider.php b/src/GeocoderServiceProvider.php index b843f4f..22d4d93 100644 --- a/src/GeocoderServiceProvider.php +++ b/src/GeocoderServiceProvider.php @@ -71,7 +71,9 @@ function ($arg1 = null, $arg2 = null, $arg3 = null, $arg4 = null) use ($app, $pr $this->app['geocoder'] = $this->app->share(function($app) { $geocoder = new Geocoder; - $geocoder->registerProvider($app['geocoder.chain']); + $geocoder->registerProviders( + $this->getGeocoderProviders($this->app['config']->get('geocoder.providers')) + ); return $geocoder; }); @@ -86,4 +88,32 @@ public function provides() { return ['geocoder', 'geocoder.adapter', 'geocoder.chain']; } + + protected function getGeocoderProviders(array $providersConfig) + { + $providers = []; + + foreach($providersConfig as $provider => $arguments) { + //Chain provider + if(is_int($provider)){ + $chainProviders = $this->getGeocoderProviders($arguments); + $providers[] = new ChainProvider($chainProviders); + }else { + if (0 !== count($arguments)) { + $providers[] = call_user_func_array( + function ($arg1 = null, $arg2 = null, $arg3 = null, $arg4 = null) use ($provider) { + return new $provider($this->app['geocoder.adapter'], $arg1, $arg2, $arg3, $arg4); + }, + $arguments + ); + + continue; + } + + $providers[] = new $provider($this->app['geocoder.adapter']); + } + } + + return $providers; + } } From 3e62b600e8ed928727f6b065c85229562ebad2f7 Mon Sep 17 00:00:00 2001 From: Ilya Shtricul Date: Tue, 22 Dec 2015 09:29:26 +0300 Subject: [PATCH 3/8] Deleted chain provider singleton --- src/GeocoderServiceProvider.php | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/src/GeocoderServiceProvider.php b/src/GeocoderServiceProvider.php index 22d4d93..ec822ec 100644 --- a/src/GeocoderServiceProvider.php +++ b/src/GeocoderServiceProvider.php @@ -48,27 +48,6 @@ public function register() return new $adapter; }); - $this->app->singleton('geocoder.chain', function($app) { - $providers = []; - - foreach($app['config']->get('geocoder.providers') as $provider => $arguments) { - if (0 !== count($arguments)) { - $providers[] = call_user_func_array( - function ($arg1 = null, $arg2 = null, $arg3 = null, $arg4 = null) use ($app, $provider) { - return new $provider($app['geocoder.adapter'], $arg1, $arg2, $arg3, $arg4); - }, - $arguments - ); - - continue; - } - - $providers[] = new $provider($app['geocoder.adapter']); - } - - return new ChainProvider($providers); - }); - $this->app['geocoder'] = $this->app->share(function($app) { $geocoder = new Geocoder; $geocoder->registerProviders( From f1bd05b20c9f69192c532f38cf79f25e36d82355 Mon Sep 17 00:00:00 2001 From: Ilya Shtricul Date: Tue, 22 Dec 2015 10:16:24 +0300 Subject: [PATCH 4/8] Fix namespaces for Geocoder v3 --- src/GeocoderServiceProvider.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/GeocoderServiceProvider.php b/src/GeocoderServiceProvider.php index ec822ec..cf74d87 100644 --- a/src/GeocoderServiceProvider.php +++ b/src/GeocoderServiceProvider.php @@ -11,8 +11,8 @@ namespace Toin0u\Geocoder; -use Geocoder\Geocoder; -use Geocoder\Provider\ChainProvider; +use Geocoder\ProviderAggregator; +use Geocoder\Provider\Chain; /** * Geocoder service provider @@ -49,7 +49,7 @@ public function register() }); $this->app['geocoder'] = $this->app->share(function($app) { - $geocoder = new Geocoder; + $geocoder = new ProviderAggregator; $geocoder->registerProviders( $this->getGeocoderProviders($this->app['config']->get('geocoder.providers')) ); @@ -65,7 +65,7 @@ public function register() */ public function provides() { - return ['geocoder', 'geocoder.adapter', 'geocoder.chain']; + return ['geocoder', 'geocoder.adapter']; } protected function getGeocoderProviders(array $providersConfig) @@ -76,7 +76,7 @@ protected function getGeocoderProviders(array $providersConfig) //Chain provider if(is_int($provider)){ $chainProviders = $this->getGeocoderProviders($arguments); - $providers[] = new ChainProvider($chainProviders); + $providers[] = new Chain($chainProviders); }else { if (0 !== count($arguments)) { $providers[] = call_user_func_array( From 3a7841dd6f32b561c459ab72836a61855c6c619e Mon Sep 17 00:00:00 2001 From: Ilya Shtricul Date: Tue, 22 Dec 2015 10:19:35 +0300 Subject: [PATCH 5/8] Fix namespaces for Geocoder v3 --- config/geocoder.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/config/geocoder.php b/config/geocoder.php index 61624ea..c77a084 100644 --- a/config/geocoder.php +++ b/config/geocoder.php @@ -13,8 +13,14 @@ // Providers get called in the chain order given here. // The first one to return a result will be used. 'providers' => [ - 'Geocoder\Provider\GoogleMapsProvider' => ['fr-FR', 'Île-de-France', true], - 'Geocoder\Provider\FreeGeoIpProvider' => null, + // Named Providers + Geocoder\Provider\GoogleMaps::class => ['fr-FR', 'Île-de-France', true], + Geocoder\Provider\FreeGeoIp::class => null, + // Chain Provider + [ + Geocoder\Provider\GoogleMaps::class => ['fr-FR', 'Île-de-France', true], + Geocoder\Provider\FreeGeoIp::class => null, + ] ], - 'adapter' => 'Geocoder\HttpAdapter\CurlHttpAdapter', + 'adapter' => Ivory\HttpAdapter\CurlHttpAdapter::class, ]; From 5fa2ae32c8334ad6082704fa4d82ad4fd9629d18 Mon Sep 17 00:00:00 2001 From: Ilya Shtricul Date: Tue, 22 Dec 2015 14:19:36 +0300 Subject: [PATCH 6/8] run test --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2cbd33a..d06a967 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Geocoder for Lavarel 5 ====================== -If you still use **Lavarel 4**, please check out the `0.4.x` branch [here](https://github.com/geocoder-php/GeocoderLaravel/tree/0.4.x). +If you still use **Lavarel 4**, please check out the `0.4.x` branch [here](https://github.com/geocoder-php/GeocoderLaravel/tree/0.4.x).. This package allows you to use [**Geocoder**](http://geocoder-php.org/Geocoder/) in [**Laravel 5**](http://laravel.com/). From d93d903a7d0be46cc206c01a0210c149bbbe40dc Mon Sep 17 00:00:00 2001 From: Ilya Shtricul Date: Tue, 22 Dec 2015 15:00:20 +0300 Subject: [PATCH 7/8] Fixed tests --- tests/Facade/GeocoderTest.php | 2 +- tests/GeocoderServiceProviderTest.php | 41 ++++++++++++++++++--------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/tests/Facade/GeocoderTest.php b/tests/Facade/GeocoderTest.php index 079e650..534b9cf 100644 --- a/tests/Facade/GeocoderTest.php +++ b/tests/Facade/GeocoderTest.php @@ -20,6 +20,6 @@ public function testGeocoderFacade() { $this->assertTrue(is_array($providers = \Geocoder::getProviders())); $this->assertArrayHasKey('chain', $providers); - $this->assertInstanceOf('Geocoder\\Provider\\ChainProvider', $providers['chain']); + $this->assertInstanceOf('Geocoder\\Provider\\Chain', $providers['chain']); } } diff --git a/tests/GeocoderServiceProviderTest.php b/tests/GeocoderServiceProviderTest.php index 57c9d45..d59864e 100644 --- a/tests/GeocoderServiceProviderTest.php +++ b/tests/GeocoderServiceProviderTest.php @@ -19,10 +19,10 @@ class GeocoderServiceProviderTest extends TestCase public function testConfig() { $this->assertTrue(is_array($providers = $this->app['config']->get('geocoder.providers'))); - $this->assertCount(2, $providers); - $this->assertArrayHasKey('Geocoder\\Provider\\GoogleMapsProvider', $providers); - $this->assertArrayHasKey('Geocoder\\Provider\\FreeGeoIpProvider', $providers); - $this->assertSame('Geocoder\\HttpAdapter\\CurlHttpAdapter', $this->app['config']->get('geocoder.adapter')); + $this->assertCount(3, $providers); + $this->assertArrayHasKey('Geocoder\\Provider\\GoogleMaps', $providers); + $this->assertArrayHasKey('Geocoder\\Provider\\FreeGeoIp', $providers); + $this->assertSame('Ivory\\HttpAdapter\\CurlHttpAdapter', $this->app['config']->get('geocoder.adapter')); } public function testLoadedProviders() @@ -35,25 +35,38 @@ public function testLoadedProviders() public function testGeocoderDefaultAdapter() { - $this->assertInstanceOf('Geocoder\\HttpAdapter\\CurlHttpAdapter', $this->app['geocoder.adapter']); + $this->assertInstanceOf('Ivory\\HttpAdapter\\CurlHttpAdapter', $this->app['geocoder.adapter']); } public function testGeocoderChainProvider() { - $this->assertInstanceOf('Geocoder\\Provider\\ChainProvider', $this->app['geocoder.chain']); + $providers = $this->getProtectedProperty($this->app['geocoder'], 'providers'); + + $this->assertArrayHasKey('chain', $providers); + + $this->assertInstanceOf('Geocoder\\Provider\\Chain', $providers['chain']); + + $chainProviders = $this->getProtectedProperty($providers['chain'], 'providers'); + + $this->assertInstanceOf('Geocoder\\Provider\\GoogleMaps', $chainProviders[0]); + $this->assertSame('fr-FR', $chainProviders[0]->getLocale()); + $this->assertInstanceOf('Ivory\\HttpAdapter\\CurlHttpAdapter', $chainProviders[0]->getAdapter()); + + $this->assertInstanceOf('Geocoder\\Provider\\FreeGeoIp', $chainProviders[1]); + $this->assertInstanceOf('Ivory\\HttpAdapter\\CurlHttpAdapter', $chainProviders[1]->getAdapter()); + } - public function testGeocoderDefaultProvider() + public function testGeocoderNamedProviders() { - $providers = $this->getProtectedProperty($this->app['geocoder.chain'], 'providers'); + $providers = $this->getProtectedProperty($this->app['geocoder'], 'providers'); - $this->assertInstanceOf('Geocoder\\Provider\\GoogleMapsProvider', $providers[0]); - $this->assertSame('fr-FR', $providers[0]->getLocale()); - $this->assertInstanceOf('Geocoder\\HttpAdapter\\CurlHttpAdapter', $providers[0]->getAdapter()); + $this->assertInstanceOf('Geocoder\\Provider\\GoogleMaps', $providers['google_maps']); + $this->assertSame('fr-FR', $providers['google_maps']->getLocale()); + $this->assertInstanceOf('Ivory\\HttpAdapter\\CurlHttpAdapter', $providers['google_maps']->getAdapter()); - $this->assertInstanceOf('Geocoder\\Provider\\FreeGeoIpProvider', $providers[1]); - $this->assertNull($providers[1]->getLocale()); - $this->assertInstanceOf('Geocoder\\HttpAdapter\\CurlHttpAdapter', $providers[1]->getAdapter()); + $this->assertInstanceOf('Geocoder\\Provider\\FreeGeoIp', $providers['free_geo_ip']); + $this->assertInstanceOf('Ivory\\HttpAdapter\\CurlHttpAdapter', $providers['free_geo_ip']->getAdapter()); } public function testGeocoder() From dc4cba5fc8ca346c3c57165cd42b42be8218e716 Mon Sep 17 00:00:00 2001 From: Ilya Shtricul Date: Tue, 22 Dec 2015 15:04:59 +0300 Subject: [PATCH 8/8] Added PHP 5.4 support --- config/geocoder.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/config/geocoder.php b/config/geocoder.php index c77a084..37a5178 100644 --- a/config/geocoder.php +++ b/config/geocoder.php @@ -14,13 +14,13 @@ // The first one to return a result will be used. 'providers' => [ // Named Providers - Geocoder\Provider\GoogleMaps::class => ['fr-FR', 'Île-de-France', true], - Geocoder\Provider\FreeGeoIp::class => null, + 'Geocoder\Provider\GoogleMaps' => ['fr-FR', 'Île-de-France', true], + 'Geocoder\Provider\FreeGeoIp' => null, // Chain Provider [ - Geocoder\Provider\GoogleMaps::class => ['fr-FR', 'Île-de-France', true], - Geocoder\Provider\FreeGeoIp::class => null, + 'Geocoder\Provider\GoogleMaps' => ['fr-FR', 'Île-de-France', true], + 'Geocoder\Provider\FreeGeoIp' => null, ] ], - 'adapter' => Ivory\HttpAdapter\CurlHttpAdapter::class, + 'adapter' => 'Ivory\HttpAdapter\CurlHttpAdapter', ];