Commit graph

1171 commits

Author SHA1 Message Date
The Respect Panda e2783d4220 Update list of top-level domains 2020-07-12 00:19:29 +00:00
The Respect Panda 80f236bb90 Update list of top-level domains 2020-06-07 00:14:45 +00:00
The Respect Panda 83936a0c00
Update list of top-level domains 2020-06-03 09:40:10 +02:00
The Respect Panda 6eeacfce5a Update list of language codes 2020-05-31 00:11:47 +00:00
Henrique Moody 83b515d0a3
Configure GitHub workflow to update language codes
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2020-05-26 18:33:23 +02:00
Henrique Moody e0fbed32c9
Update list of currency codes
Also updates the script that updates the currency codes.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2020-05-20 15:02:44 +02:00
Henrique Moody 6f92132874
Update list of top-level domains
This commit will add the LLP, XN--MGBCPQ6GPA1A, XN--Q7CE6A and XN--QXA6A
top-level domains, and remove BNL, CARTIER, CHRYSLER, DODGE, DUNS,
EVERBANK, HONEYWELL, ISELECT, LADBROKES, LANCOME, LIAISON, MOBILY,
MOPAR, MOVISTAR, NADEX, PIAGET, SRT, STARHUB, TELEFONICA, UCONNECT,
VISTAPRINT, WARMAN, XN--ESTV75G and XN--MGBB9FBPOB top-level domains.

Below the Bash command I used to generate the new list:

curl https://data.iana.org/TLD/tlds-alpha-by-domain.txt |
  grep --invert-match '^#' |
  sed --regexp-extended "s,^,',; s/$/', /" |
  tr --delete '\n' |
  fold --width=72 --spaces

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2020-05-19 11:31:43 +02:00
Henrique Moody 37746f3a6d
Update list of postal code validations
This commit will update the list of postal codes using the command
below:

curl -L http://download.geonames.org/export/dump/countryInfo.txt |
  sed 's,\t,\;,g' |
  sort --unique |
  cut --delimiter ';' --field 1,15 |
  sed --regexp-extended "/^#/d; /^[A-Z]{2}\;$/d; s,([A-Z]{2})\;(.+),'\1' => '/\2/'\,,g"

The changes that broke existing tests were reverted.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2020-05-18 22:22:38 +02:00
Daniel Altenburg 6e2b3e599e
Update validation for Armenian postal codes
According to Wikipedia[1]:

> Postal codes in Armenia consist of four digits. Until April 1, 2006,
> they consisted of six digits.

[1]: https://en.wikipedia.org/wiki/Postal_codes_in_Armenia

Co-authored-by: Henrique Moody <henriquemoody@gmail.com>
2020-05-18 22:06:15 +02:00
Mateusz Burzyński a44f97f4b3
Add support for Caymanian postal code validation
According to Wikipedia[1]:

> A postal code typically consists of an island code, a hyphen
> separator, and a section code.
>
> There are only three island codes: KY1 for Grand Cayman, KY2 for
> Cayman Brac, and KY3 for Little Cayman.

[1]: https://en.wikipedia.org/wiki/Postal_codes_in_the_Cayman_Islands

Co-authored-by: Henrique Moody <henriquemoody@gmail.com>
2020-05-18 21:59:02 +02:00
Bogus b7b67da31e
Update validation for Israeli postal codes
According to Wikipedia [1]:

> Until February 2013, Israel postal codes were 5-digit. Officially the
> 5-digit codes remained valid until 31 January 2013, though they
> continue to be widely used.

This commit changes the "PostalCode" rule to allow either 5 or 7 digits.

[1]: https://en.wikipedia.org/wiki/List_of_postal_codes

Co-authored-by: Henrique Moody <henriquemoody@gmail.com>
2020-05-18 21:46:57 +02:00
Dylan T 3501192293
Report all errors when asserting with "Each" rule
The intention of the "assert()" method is to show all the errors that a
given input may have. The implementation of the "assert()" method in the
"Each" rule, on the other hand, only reports the first error of each
element of the input.

This commit makes "Each" show all the validation failures of each
element of the input. Also, the implementation of
"AbstractRule::check()" is simply a proxy for the "assert()" method,
and since the "Each" rule extends that class, this commit creates a
custom implementation of the "check()" method.

Co-authored-by: Henrique Moody <henriquemoody@gmail.com>
2020-05-18 21:18:13 +02:00
pathumhdes 7154e90522
Restore previous error handler when validation fails
The "Call" validator, the "assert()" and "check()" methods, define a
custom error handler so it can handle the validation in case of a PHP
error. However, it does not restor the previous error handler when the
validation fails.

Co-authored-by: Henrique Moody <henriquemoody@gmail.com>
2020-05-18 15:26:06 +02:00
Daniel Altenburg 3463343b14
Fix ecuador postal code format to 6 digits
Co-authored-by: Henrique Moody <henriquemoody@gmail.com>
2020-05-13 18:41:55 +02:00
Pierre-Antoine Guillaume 4d706b0845
Update docblock from "when" rule
The variable name in dynamic method when does not match variable name in When object.
2020-04-16 17:24:58 +02:00
Mikko Pesari 015e6d4a54 Fix Email validator when egulias/email-validator was not installed 2020-04-08 18:00:19 +03:00
Henrique Moody b9e73db494
Add support for PHP 7.4 version
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2020-04-04 22:29:03 +02:00
Henrique Moody 9a41f64479
Fix possible error when recursing exceptions
The method "current()" from NestedValidationException can return any
instance of ValidationException, but the implementation of
"getChildren()" requires it to return an instance of
"NestedValidationException".

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2020-04-04 21:01:30 +02:00
Henrique Moody 2d0f56d9cb
Merge branch '1.1'
This commit will revert the update of subdivision codes [1] since the
way we store this data is very different from the merged branch.

[1]: 8b8f7db713

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-29 23:17:53 +02:00
Henrique Moody 45d109fc83
Update list of currency codes
This commit will also create a Bash script to update that list in the
future.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-28 08:10:06 +02:00
Henrique Moody c51931679c
Update list of language code
This commit will also create a Bash script to update that list in the
future.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-28 08:02:57 +02:00
Henrique Moody 8b8f7db713
Update list of subdivision codes
To update the list of subdivisions, I decided to use the iso-codes [1]
instead of GeoNames [2] as it seems like that one is more often updated.

This commit will also create a Bash script to update that list in the
future.

[1]: https://salsa.debian.org/iso-codes-team/iso-codes
[2]: http://www.geonames.org/

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-26 16:18:49 +02:00
Henrique Moody f580e187d0
Update list of Country Codes
To update the list of countries, I decided to use the iso-codes [1]
instead of GeoNames [2] as it seems like that one is more often updated.

This commit will also create a Bash script to update that list in the
future.

[1]: https://salsa.debian.org/iso-codes-team/iso-codes
[2]: http://www.geonames.org/

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-26 14:59:41 +02:00
Henrique Moody 5c61c25680
Update TLD list to version 2019052600
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-26 13:12:16 +02:00
Henrique Moody ef8a8f4b27
Turn LICENSE file into plain/text
There is no need for that file to be a Markdown, and it can be a plain
text file.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-23 16:21:34 +02:00
Henrique Moody 3093d79155
Allow to customize parameter stringifier
We have seen users that want to change the default behavior of parameter
stringifier:

* Change the depth level shown from an array.

* Change the number of elements shown from an array.

* Not add quotes to some parameters.

Because of that, this commit will allow users to customize the parameter
stringifier.

This commit will also update the documentation to instruct how to
customize it.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-12 13:49:54 +02:00
Henrique Moody 00f61b9bdc
Move message formatting out of ValidationException
There should not be too much code in the ValidationException. It is hard
to test and debug code in exceptions because PHP does not trace further
than their constructor.

This commit will move the message formatting from ValidationException
into a Formatter class (inside a Message namespace).

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-12 13:45:38 +02:00
Henrique Moody ab602ae1bb
Improve how to customize the Factory
The constructor of "Factory" has three arguments and, even though none
of them are needed, they are all required. Those arguments allow users
to customize the namespaces of rules and exceptions, and also to define
a callable that will translate the template messages.

This commit will remove those parameters from the constructor of
"Factory," and create methods that will allow users to customize the
namespaces and the translator.

The methods that this commit will create will not change the state of
"Factory," but they will create a clone with the customizations. It is
imperative that the "Factory" is immutable. Since the "Factory" is a
Singleton, allowing it to change could cause unexpected behaviors.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-12 12:24:44 +02:00
Henrique Moody f3bc39066b
Make default templates non-static and protected
The only reason why those templates are static is so users can overwrite
the exception messages. That was useful when we didn't have a handy
translator, but now that we can define a translator through the Factory,
this is not needed anymore.

Besides, having those properties public adds complexity to the code.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-12 09:57:07 +02:00
Henrique Moody c522f6235c
Remove "IdentityCard" in favor of "PolishIdCard"
The only Identity Card we have is the Polish one, that said it makes
more sense to have a specific rule that only validates that, rather than
having a "IdentityCard" rule that only accepts one value.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-12 00:22:45 +02:00
Henrique Moody f23b3a522a
Remove "Vatin" in favor of "Nip"
There are not other VATINs besides the one from Poland. That said, it
makes more sense to have a specific rule that only validates NIP.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-11 23:44:10 +02:00
Henrique Moody 272f18dcf5
Apply "Symfony.Functions.ScopeOrder"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-11 20:00:19 +02:00
Henrique Moody 9c0f8dcfcc
Rename rule "Cntrl" to "Control"
This commit will rename the rule by removing the abbreviation to make it
a bit easier to understand what it does and much easier to find.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-11 19:35:14 +02:00
Henrique Moody 051866f75a
Make properties of "AbstractRelated" private
Following what is happening with pretty much every class in this
library, this commit will make the public properties of
"AbstractRelated" private.

Because other objects use some of those public properties, this commit
will also implement a couple of methods in "AbstractRelated" so they can
access the values they need.

This commit will also remove the method "decision" that makes dynamic
calls to "assert()," "check()," and "validate()" methods.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-05 16:54:04 +02:00
Henrique Moody d58395626f
Remove exceptions from suvdivision code rules
The "SubdivisionCode" rule was refactored [1] and now it doesn't need
one rule per country.

This commit will also remove the exceptions that were supposed to be
removed before.

[1]: 718bacad04

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-05 14:55:11 +02:00
Henrique Moody 2ac0aecf0c
Fix some issues with the "KeyValue" rule
There are a couple of issues with the "KeyValue" rule:

* When using it with "Not" it does not fetch the exception from the rule
  that it creates during the validation.

* It creates a "Validator" rule, which means that it creates two rules
  (Validator and the real rule) every time it validates an input.

This commit will fix these two issues and also create integration tests
that will ensure its behavior in case of change.

Co-authored-by: Danilo Correa <danilosilva87@gmail.com>
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-04-23 19:55:13 +02:00
Henrique Moody 718bacad04
Remove subdivision code rules per country
There is no much benefit from having individual rules for each country's
subdivision, quite the opposite. It increases the amount of code and
makes it hard to change the implementation of these rules. Right now,
the only sane way to change those rules is with a customized script.

This commit will remove the Subdivision Code rules per country and
instead will put that information into JSON files.

We both wouldn't like to keep this in this library anymore, and we are
considering having another library to deal with this data [1], but since
it seems like it may take some time, looks better to do it temporarily
here.

[1]: https://github.com/sokil/php-isocodes/issues/12

Co-authored-by: Mazen Touati <mazen_touati@hotmail.com>
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-04-06 23:05:24 +02:00
Henrique Moody 1b844763a9
Improve message when nested "Not" rules fail
When using nested "Not" and "AllOf" rules Validation does not fetch the
message of the rule that failed, and instead it fetches the default
message in "AllOfException."

That is because "Not" cannot reach the rules inside "AllOf," making it
impossible to fetch the correct message.

This commit will improve that a bit but making "Not" deal directly with
the rule inside "AllOf" when it has only one rule.

Unfortunately, it will not fix all the issues. For example, when the
negated rule is an "AllOf" with multiple rules and it fails "Not" will
fetch only the first message.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-04-05 23:32:31 +02:00
Henrique Moody 51f157605d
Make "NotEmpty" a final class
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-04-05 20:28:58 +02:00
Henrique Moody 7b53d54931
Apply contribution guidelines to "No" rule
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-04-05 20:25:00 +02:00
Henrique Moody 22f3f80f4c
Make some improvements to the "Roman" rule
The rule validates any empty string as a valid input, its exception
message states Roman with lower-case "R" and refers to numbers instead
of numerals, which is the most common usage.

This commit will fix both behaviors and also improve the tests for the
rule.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-04-05 20:15:46 +02:00
Henrique Moody cb528ae612
Apply contribution guidelines to "Xdigit" rule
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-04-05 20:09:17 +02:00
Henrique Moody 18ce48371c
Allow hex RGB colors with 3 integers
This commit will also apply the contribution guidelines to the rule and
improve its  documentation.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-04-05 19:05:53 +02:00
Henrique Moody 6040ddee42
Fix the case of the "@inheritDoc" tag
According to the official documentation [1] the correct way of writing
the "inheritDoc" tag is with the uppercase "D".

[1]: https://docs.phpdoc.org/guides/inheritance.html

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-04-05 19:02:12 +02:00
Henrique Moody cd2390a9b0
Refactor "Domain" rule
The "Domain" rule duplicates a lot of its logic among the methods
"check()," "validate()," and "assert()." Such duplication makes it hard
to maintain and hard to understand.

Besides that:

- It triggers a PHP error when trying to validate a non-scalar value;

- It does not show the exceptions in the correct hierarchy;

- It allows to change the TLD validation after to object is created.

This commit will fix those issues and create better tests for the rule.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-04-05 18:57:22 +02:00
Henrique Moody 81ce5b090b
Merge branch '1.1' 2019-03-31 15:40:12 +02:00
Daniel Alt 9bafee191d
Fix Irish postal code validation
Co-authored-by: Henrique Moody <henriquemoody@gmail.com>
2019-03-31 15:27:49 +02:00
Mazen Touati 9dca4bde60
Add inclusive messages to LengthException 2019-03-31 00:50:24 +01:00
Paulo Dias f246939221 Fix bug to validate "01234567890" input in CPF rule 2019-03-29 13:26:36 -03:00
Henrique Moody 166501804f
Refactor "Zend" rule
- Only create objects that are instantiable.

- Validate if validator is a valid Zend Validator after its creation.

- Parse messages from Zend Validator on "assert()" and "check()."

- Upgrade supported version of Zend Validator: version 2.0 has some PHP
  deprecations therefore there is no used to support it.

Co-authored-by: Danilo Correa <danilosilva87@gmail.com>
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-03-10 22:13:16 +01:00