Skip to content

Commit

Permalink
Merge pull request #2 from glhd/development
Browse files Browse the repository at this point in the history
0.4.3
  • Loading branch information
inxilpro authored Aug 15, 2017
2 parents c95cc94 + e4d3e48 commit eb6dc21
Show file tree
Hide file tree
Showing 8 changed files with 129 additions and 53 deletions.
9 changes: 9 additions & 0 deletions .idea/composerJson.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,4 @@ GET /galahad/addressing/countries?locale=pt

### Thanks!

Special thanks to [Commerce Guys](https://github.com/commerceguys) for their amazing [addressing](https://github.com/commerceguys/addressing) and [intl](https://github.com/commerceguys/intl) packages, which this project relies heavily on.
Special thanks to [Commerce Guys](https://github.com/commerceguys) for their amazing [addressing](https://github.com/commerceguys/addressing) and [intl](https://github.com/commerceguys/intl) packages, which this project relies heavily on.
14 changes: 7 additions & 7 deletions src/Entity/Country.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ public function administrativeAreas()
*/
public function administrativeArea($code)
{
$code = strtoupper($code);
if (strpos($code, '-') === false) {
$code = $this->getCountryCode().'-'.$code;
}
Expand All @@ -83,7 +84,7 @@ public function administrativeArea($code)
public function administrativeAreaByName($administrativeAreaName)
{
foreach ($this->getAdministrativeAreasList() as $code => $name) {
if ($name == $administrativeAreaName) {
if (0 === strcasecmp($name, $administrativeAreaName)) {
return $this->administrativeArea($code);
}
}
Expand All @@ -97,12 +98,11 @@ public function administrativeAreaByName($administrativeAreaName)
*/
public function findAdministrativeArea($codeOrName)
{
$administrativeArea = $this->administrativeArea($codeOrName);
if (! $administrativeArea instanceof AdministrativeArea) {
return $this->administrativeAreaByName($codeOrName);
if ($administrativeArea = $this->administrativeArea($codeOrName)) {
return $administrativeArea;
}

return $administrativeArea;
return $this->administrativeAreaByName($codeOrName);
}

/**
Expand Down Expand Up @@ -130,4 +130,4 @@ public function getLocale()
{
return $this->addressing->getLocale();
}
}
}
10 changes: 7 additions & 3 deletions src/LaravelAddressing.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public function __construct($locale = 'en')
*/
public function country($countryCode)
{
$countryCode = strtoupper($countryCode);
return $this->getCountryRepository()->get($countryCode, $this->locale);
}

Expand Down Expand Up @@ -83,10 +84,13 @@ public function countryByName($countryName)
*/
public function findCountry($codeOrName)
{
$code = strtoupper($codeOrName);
$countryList = $this->getCountryList();
if (isset($countryList[$codeOrName])) {
return $this->country($codeOrName);

if (isset($countryList[$code])) {
return $this->country($code);
}

return $this->countryByName($codeOrName);
}

Expand Down Expand Up @@ -163,4 +167,4 @@ public function getAdministrativeAreaRepository()

return $this->administrativeAreaRepository;
}
}
}
3 changes: 2 additions & 1 deletion src/Repository/AdministrativeAreaRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ protected function createSubdivisionFromDefinitions($id, array $definitions, $lo
*/
public function getAll($countryCode, $parentId = null, $locale = null)
{
$countryCode = strtoupper($countryCode);
$subdivisions = parent::getAll($countryCode, $parentId, $locale);

return new AdministrativeAreaCollection($subdivisions);
Expand All @@ -66,4 +67,4 @@ public function get($id, $locale = null)
{
return parent::get($id, $locale);
}
}
}
108 changes: 71 additions & 37 deletions src/ServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Galahad\LaravelAddressing\Validator\AdministrativeAreaValidator;
use Galahad\LaravelAddressing\Validator\CountryValidator;
use Galahad\LaravelAddressing\Validator\PostalCodeValidator;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Validation\Factory;

/**
Expand All @@ -21,56 +22,89 @@ class ServiceProvider extends \Illuminate\Support\ServiceProvider
*/
public function boot()
{
if (!$this->app->routesAreCached()) {
require_once __DIR__ . '/routes.php';
}
$this->registerValidators($this->app->validator);
$this->bootRoutes();
$this->loadTranslationsFrom(__DIR__.'/../lang', 'laravel-addressing');
}

/**
* Boot routes if routing is supported
*/
protected function bootRoutes()
{
if (method_exists($this->app, 'routesAreCached') && $this->app->routesAreCached()) {
return;
}

try {
$route = $this->app->make('router');
$route->group(['prefix' => 'galahad/addressing'], function($route) {
$route->get('/{country}/administrative-areas', [
'as' => 'galahad.addressing.administrative-areas',
'uses' => '\\Galahad\\LaravelAddressing\\Controller@getAdministrativeAreas',
]);
$route->get('/{country}/{administrativeArea}/cities', [
'as' => 'galahad.addressing.cities',
'uses' => '\\Galahad\\LaravelAddressing\\Controller@getCities',
]);
$route->get('/countries', [
'as' => 'galahad.addressing.countries',
'uses' => '\\Galahad\\LaravelAddressing\\Controller@getCountries',
]);
});
} catch (BindingResolutionException $exception) {
// Skip routes if no router exists
}
}

/**
* Register the LaravelAddressing instance
*/
public function register()
{
$this->app->singleton(LaravelAddressing::class, function ($app) {
return new LaravelAddressing();
});
$this->app->singleton(LaravelAddressing::class, function($app) {
return new LaravelAddressing(
$app->make('config')->get('app.locale', 'en')
);
});

$this->registerValidators();
}

/**
* Register all custom validators
*
* @param Factory $validatorFactory
*/
protected function registerValidators(Factory $validatorFactory)
protected function registerValidators()
{
// Country validators
$validatorFactory->extend(
'country_code',
CountryValidator::class.'@validateCountryCode'
);
$validatorFactory->extend(
'country_name',
CountryValidator::class.'@validateCountryName'
);
// Administrative Area validators
$validatorFactory->extend(
'administrative_area_code',
AdministrativeAreaValidator::class.'@validateAdministrativeAreaCode'
);
$validatorFactory->extend(
'administrative_area_name',
AdministrativeAreaValidator::class.'@validateAdministrativeAreaName'
);
$validatorFactory->extend(
'administrative_area',
AdministrativeAreaValidator::class.'@validateAdministrativeArea'
);
// Postal Code validator
$validatorFactory->extend(
'postal_code',
PostalCodeValidator::class.'@validatePostalCode'
);
$this->app->resolving('validator', function($validator, $app) {
// Country validators
$validator->extend(
'country_code',
CountryValidator::class.'@validateCountryCode'
);
$validator->extend(
'country_name',
CountryValidator::class.'@validateCountryName'
);

// Administrative Area validators
$validator->extend(
'administrative_area_code',
AdministrativeAreaValidator::class.'@validateAdministrativeAreaCode'
);
$validator->extend(
'administrative_area_name',
AdministrativeAreaValidator::class.'@validateAdministrativeAreaName'
);
$validator->extend(
'administrative_area',
AdministrativeAreaValidator::class.'@validateAdministrativeArea'
);

// Postal Code validator
$validator->extend(
'postal_code',
PostalCodeValidator::class.'@validatePostalCode'
);
});
}
}
11 changes: 10 additions & 1 deletion tests/LaravelAddressingTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -130,4 +130,13 @@ public function testFindAdministrativeArea()
$alabama = $country->findAdministrativeArea('Alabama');
$this->assertEquals($alabama->getCode(), 'AL');
}
}

public function testIsCaseInsensitive()
{
$country = $this->addressing->country('us');
$alabama = $country->findAdministrativeArea('al');
$this->assertEquals($alabama->getName(), 'Alabama');
$alabama = $country->findAdministrativeArea('alabama');
$this->assertEquals($alabama->getCode(), 'AL');
}
}
25 changes: 22 additions & 3 deletions tests/TranslationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,33 @@ class TranslationTest extends TestCase
*/
protected $validator;

/**
* @var string
*/
protected $translationDirectory;

public function setUp()
{
parent::setUp();
$this->validator = $this->app['validator'];
$this->translationDirectory = __DIR__.'/../lang';
}

protected function getPackageProviders($app)
{
return [ServiceProvider::class];
}

protected function getMessage($locale, $filename, $key, $field)
{
$filePath = sprintf('%s/%s/%s.php', $this->translationDirectory, $locale, $filename);
$arrayContent = include $filePath;

if (isset($arrayContent[$key])) {
return str_replace(':attribute', $field, $arrayContent[$key]);
}
}

public function testENMessages()
{
$this->app->setLocale('en');
Expand All @@ -37,7 +53,8 @@ public function testENMessages()
if ($validator->fails()) {
$messages = $validator->errors()->get('country');
$first = array_shift($messages);
$this->assertEquals($first, 'The country field is not a valid country code.');
$expectedMessage = $this->getMessage('en', 'validation', 'country_code', 'country');
$this->assertEquals($first, $expectedMessage);
}
}

Expand All @@ -51,7 +68,8 @@ public function testPT_BRMessages()
if ($validator->fails()) {
$messages = $validator->errors()->get('country');
$first = array_shift($messages);
$this->assertEquals($first, 'O campo country não possui um código de país válido.');
$expectedMessage = $this->getMessage('pt-br', 'validation', 'country_code', 'country');
$this->assertEquals($first, $expectedMessage);
}
}

Expand All @@ -65,7 +83,8 @@ public function testENMessagesForAdministrativeAreaValidator()
if ($validator->fails()) {
$messages = $validator->errors()->get('state');
$first = array_shift($messages);
$this->assertEquals($first, 'The state field is not a valid state/province.');
$expectedMessage = $this->getMessage('en', 'validation', 'administrative_area', 'state');
$this->assertEquals($first, $expectedMessage);
}
}
}

0 comments on commit eb6dc21

Please sign in to comment.