diff --git a/ProviderFactory/AlgoliaFactory.php b/ProviderFactory/AlgoliaFactory.php new file mode 100644 index 00000000..74549332 --- /dev/null +++ b/ProviderFactory/AlgoliaFactory.php @@ -0,0 +1,45 @@ + AlgoliaPlaces::class, 'packageName' => 'geocoder-php/algolia-places-provider'], + ]; + + protected function getProvider(array $config): Provider + { + $httplug = $config['httplug_client'] ?: HttpClientDiscovery::find(); + + return new AlgoliaPlaces($httplug, $config['api_key'], $config['app_id']); + } + + protected static function configureOptionResolver(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'httplug_client' => null, + 'api_key' => null, + 'app_id' => null, + ]); + + $resolver->setAllowedTypes('httplug_client', ['object', 'null']); + $resolver->setAllowedTypes('api_key', ['string', 'null']); + $resolver->setAllowedTypes('app_id', ['string', 'null']); + } +} diff --git a/Resources/doc/services.md b/Resources/doc/services.md index fc2bd9df..9d5ef695 100644 --- a/Resources/doc/services.md +++ b/Resources/doc/services.md @@ -10,6 +10,7 @@ Here is a list of all provider factories and their options. | Service | Options | | ------- | ------- | +| `Bazinga\GeocoderBundle\ProviderFactory\AlgoliaPlaceFactory` | httplug_client, api_key, app_id | `Bazinga\GeocoderBundle\ProviderFactory\ArcGISOnlineFactory` | httplug_client, source_country | `Bazinga\GeocoderBundle\ProviderFactory\BingMapsFactory` | httplug_client, api_key | `Bazinga\GeocoderBundle\ProviderFactory\ChainFactory` | services diff --git a/Tests/Functional/ProviderFactoryTest.php b/Tests/Functional/ProviderFactoryTest.php index 8adb4a83..f8690460 100644 --- a/Tests/Functional/ProviderFactoryTest.php +++ b/Tests/Functional/ProviderFactoryTest.php @@ -13,6 +13,7 @@ namespace Bazinga\GeocoderBundle\Tests\Functional; use Bazinga\GeocoderBundle\BazingaGeocoderBundle; +use Geocoder\Provider\AlgoliaPlaces\AlgoliaPlaces; use Geocoder\Provider\ArcGISOnline\ArcGISOnline; use Geocoder\Provider\BingMaps\BingMaps; use Geocoder\Provider\Chain\Chain; @@ -57,6 +58,7 @@ protected function getBundleClass() public function getProviders() { return [ + [AlgoliaPlaces::class, ['empty', 'acme']], [ArcGISOnline::class, ['empty', 'acme']], [BingMaps::class, ['acme']], [Chain::class, ['acme']], diff --git a/Tests/Functional/config/provider/algoliaplaces.yml b/Tests/Functional/config/provider/algoliaplaces.yml new file mode 100644 index 00000000..6053d8fe --- /dev/null +++ b/Tests/Functional/config/provider/algoliaplaces.yml @@ -0,0 +1,12 @@ +bazinga_geocoder: + profiling: + enabled: false + providers: + empty: + factory: Bazinga\GeocoderBundle\ProviderFactory\AlgoliaFactory + + acme: + factory: Bazinga\GeocoderBundle\ProviderFactory\AlgoliaFactory + options: + api_key: 'foo' + app_id: 'bar' diff --git a/composer.json b/composer.json index 1a926a40..e8450c3e 100644 --- a/composer.json +++ b/composer.json @@ -22,6 +22,7 @@ "require-dev": { "doctrine/cache": "~1.3", "doctrine/orm": "~2.3", + "geocoder-php/algolia-places-provider": "^0.1.1", "geocoder-php/arcgis-online-provider": "^4.0", "geocoder-php/bing-maps-provider": "^4.0", "geocoder-php/cache-provider": "^4.0",