Skip to content

Commit 38ff08f

Browse files
committed
Merge pull request #8 from anaxamaxan/master
Change from single provider to chain provider
2 parents 7088f31 + 16c2492 commit 38ff08f

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

src/Toin0u/Geocoder/GeocoderServiceProvider.php

+6-3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Toin0u\Geocoder;
1313

1414
use Geocoder\Geocoder;
15+
use Geocoder\Provider\ChainProvider;
1516
use Illuminate\Support\ServiceProvider;
1617

1718
/**
@@ -52,9 +53,11 @@ public function register()
5253
});
5354

5455
$this->app->singleton('geocoder.provider', function($app) {
55-
$provider = $app['config']->get('geocoder-laravel::provider');
56-
57-
return new $provider($app['geocoder.adapter']);
56+
$providers = $app['config']->get('geocoder-laravel::providers');
57+
foreach($providers as &$provider) {
58+
$provider = new $provider($app['geocoder.adapter']);
59+
}
60+
return new ChainProvider($providers);
5861
});
5962

6063
$this->app['geocoder'] = $this->app->share(function($app) {

src/config/config.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
*/
1111

1212
return array(
13-
'provider' => 'Geocoder\Provider\FreeGeoIpProvider',
13+
/* Providers get called in the chain order given here. The first one to return a result will be used. */
14+
'providers' => array(
15+
'Geocoder\Provider\FreeGeoIpProvider'
16+
),
1417
'adapter' => 'Geocoder\HttpAdapter\CurlHttpAdapter'
1518
);

tests/Geocoder/Tests/GeocoderFacadeTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class GeocoderFacadeTest extends TestCase
1919
public function testGeocoderFacade()
2020
{
2121
$this->assertTrue(is_array($providers = \Geocoder::getProviders()));
22-
$this->assertArrayHasKey('free_geo_ip', $providers);
23-
$this->assertInstanceOf('Geocoder\\Provider\\FreeGeoipProvider', $providers['free_geo_ip']);
22+
$this->assertArrayHasKey('chain', $providers);
23+
$this->assertInstanceOf('Geocoder\\Provider\\ChainProvider', $providers['chain']);
2424
}
2525
}

tests/Geocoder/Tests/GeocoderServiceProviderTest.php

+19-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class GeocoderServiceProviderTest extends TestCase
1818
{
1919
public function testConfig()
2020
{
21-
$this->assertSame('Geocoder\Provider\FreeGeoIpProvider', $this->app['config']->get('geocoder-laravel::provider'));
21+
$this->assertContains('Geocoder\Provider\FreeGeoIpProvider', $this->app['config']->get('geocoder-laravel::providers'));
2222
$this->assertSame('Geocoder\HttpAdapter\CurlHttpAdapter', $this->app['config']->get('geocoder-laravel::adapter'));
2323
}
2424

@@ -35,13 +35,30 @@ public function testGeocoderDefaultAdapter()
3535
$this->assertInstanceOf('Geocoder\\HttpAdapter\\CurlHttpAdapter', $this->app['geocoder.adapter']);
3636
}
3737

38+
public function testGeocoderChainProvider()
39+
{
40+
$this->assertInstanceOf('Geocoder\\Provider\\ChainProvider', $this->app['geocoder.provider']);
41+
}
42+
3843
public function testGeocoderDefaultProvider()
3944
{
40-
$this->assertInstanceOf('Geocoder\\Provider\\FreeGeoIpProvider', $this->app['geocoder.provider']);
45+
$providersArray = $this->getProtectedProperty($this->app['geocoder.provider'], 'providers');
46+
$this->assertInstanceOf('Geocoder\\Provider\\FreeGeoIpProvider', $providersArray[0]);
47+
4148
}
4249

4350
public function testGeocoder()
4451
{
4552
$this->assertInstanceOf('Geocoder\\Geocoder', $this->app['geocoder']);
4653
}
54+
55+
protected function getProtectedProperty($testObj, $propertyName)
56+
{
57+
$reflection = new \ReflectionClass($testObj);
58+
$property = $reflection->getProperty($propertyName);
59+
$property->setAccessible(true);
60+
61+
return $property->getValue($testObj);
62+
}
63+
4764
}

0 commit comments

Comments
 (0)