From 3fbc45d44f2d260edbac162c81250bc3859dce2c Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Thu, 24 Sep 2015 00:47:42 -0300 Subject: [PATCH] Add country code to postal code exception message --- docs/PostalCode.md | 2 ++ library/Exceptions/PostalCodeException.php | 4 ++-- library/Rules/PostalCode.php | 4 ++++ tests/unit/Rules/PostalCodeTest.php | 10 ++++++++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/PostalCode.md b/docs/PostalCode.md index c25ac9b7..19b710c3 100644 --- a/docs/PostalCode.md +++ b/docs/PostalCode.md @@ -10,6 +10,8 @@ v::numeric()->postalCode('BR')->validate('02179-000'); //true v::numeric()->postalCode('US')->validate('02179-000'); //false ``` +Message template for this validator includes `{{countryCode}}`. + Extracted from [GeoNames](http://www.geonames.org/). *** diff --git a/library/Exceptions/PostalCodeException.php b/library/Exceptions/PostalCodeException.php index 98196269..86a0dba9 100644 --- a/library/Exceptions/PostalCodeException.php +++ b/library/Exceptions/PostalCodeException.php @@ -15,10 +15,10 @@ class PostalCodeException extends ValidationException { public static $defaultTemplates = array( self::MODE_DEFAULT => array( - self::STANDARD => '{{name}} must be a valid postal code', + self::STANDARD => '{{name}} must be a valid postal code on {{countryCode}}', ), self::MODE_NEGATIVE => array( - self::STANDARD => '{{name}} must not be a valid postal code', + self::STANDARD => '{{name}} must not be a valid postal code on {{countryCode}}', ), ); } diff --git a/library/Rules/PostalCode.php b/library/Rules/PostalCode.php index cafdccd1..7cc7bf14 100644 --- a/library/Rules/PostalCode.php +++ b/library/Rules/PostalCode.php @@ -174,6 +174,8 @@ class PostalCode extends Regex 'ZM' => "/^(\d{5})$/", ); + public $countryCode; + public function __construct($countryCode, CountryCode $countryCodeRule = null) { $countryCodeRule = $countryCodeRule ?: new CountryCode(); @@ -187,6 +189,8 @@ class PostalCode extends Regex $regex = $this->postalCodes[$upperCountryCode]; } + $this->countryCode = $countryCode; + parent::__construct($regex); } } diff --git a/tests/unit/Rules/PostalCodeTest.php b/tests/unit/Rules/PostalCodeTest.php index 03737006..b13fc094 100644 --- a/tests/unit/Rules/PostalCodeTest.php +++ b/tests/unit/Rules/PostalCodeTest.php @@ -103,6 +103,16 @@ class PostalCodeTest extends \PHPUnit_Framework_TestCase $this->assertFalse($rule->validate($postalCode)); } + /** + * @expectedException Respect\Validation\Exceptions\PostalCodeException + * @expectedExceptionMessage "02179-000" must be a valid postal code on "US" + */ + public function testShouldThrowsPostalCodeExceptionWhenValidationFails() + { + $rule = new PostalCode('US'); + $rule->check('02179-000'); + } + public function invalidPostalCodesProvider() { return array(