-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #67 from programmatordev/1.x
1.x
- Loading branch information
Showing
35 changed files
with
445 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
# Language | ||
|
||
Validates that a value is a valid language code. | ||
|
||
```php | ||
Language( | ||
string $code = 'alpha-2', | ||
?string $message = null | ||
); | ||
``` | ||
|
||
## Basic Usage | ||
|
||
```php | ||
// default alpha-2 code | ||
Validator::language()->validate('pt'); // true | ||
|
||
// alpha-3 code | ||
Validator::language(code: 'alpha-3')->validate('por'); // true | ||
``` | ||
|
||
> [!NOTE] | ||
> An `UnexpectedValueException` will be thrown when the `code` value is not a valid option. | ||
> [!NOTE] | ||
> An `UnexpectedValueException` will be thrown when the input value is not a `string`. | ||
## Options | ||
|
||
### `code` | ||
|
||
type: `string` default: `alpha-2` | ||
|
||
Set code type to validate the language. | ||
Check the [official language codes](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) list for more information. | ||
|
||
Available options: | ||
|
||
- `alpha-2`: two-letter code | ||
- `alpha-3`: three-letter code | ||
|
||
### `message` | ||
|
||
type: `?string` default: `The {{ name }} value is not a valid language, {{ value }} given.` | ||
|
||
Message that will be shown if the input value is not a valid language code. | ||
|
||
The following parameters are available: | ||
|
||
| Parameter | Description | | ||
|---------------|---------------------------| | ||
| `{{ value }}` | The current invalid value | | ||
| `{{ name }}` | Name of the invalid value | | ||
| `{{ code }}` | Selected code type | | ||
|
||
## Changelog | ||
|
||
- `1.1.0` Created |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
# Locale | ||
|
||
Validates that a value is a valid locale code. | ||
|
||
```php | ||
Locale( | ||
bool $canonicalize = false, | ||
?string $message = null | ||
); | ||
``` | ||
|
||
## Basic Usage | ||
|
||
```php | ||
// by default, code should be the language code (pt, en, ...) | ||
// or the language code followed by an underscore and the uppercased country code (pt_PT, en_US, ...) | ||
Validator::locale()->validate('pt'); // true | ||
Validator::locale()->validate('pt_PT'); // true | ||
Validator::locale()->validate('pt_pt'); // false | ||
Validator::locale()->validate('pt-PT'); // false | ||
Validator::locale()->validate('pt_PRT'); // false | ||
|
||
// canonicalize value before validation | ||
Validator::language(canonicalize: true)->validate('pt_pt'); // true | ||
Validator::language(canonicalize: true)->validate('pt-PT'); // true | ||
Validator::language(canonicalize: true)->validate('pt_PRT'); // true | ||
Validator::language(canonicalize: true)->validate('PT-pt.utf8'); // true | ||
``` | ||
|
||
> [!NOTE] | ||
> An `UnexpectedValueException` will be thrown when the input value is not a `string`. | ||
## Options | ||
|
||
### `canonicalize` | ||
|
||
type: `bool` default: `false` | ||
|
||
If `true`, the input value will be normalized before validation, according to the following [documentation](https://unicode-org.github.io/icu/userguide/locale/#canonicalization). | ||
|
||
### `message` | ||
|
||
type: `?string` default: `The {{ name }} value is not a valid locale, {{ value }} given.` | ||
|
||
Message that will be shown if the input value is not a valid locale code. | ||
|
||
The following parameters are available: | ||
|
||
| Parameter | Description | | ||
|---------------|---------------------------| | ||
| `{{ value }}` | The current invalid value | | ||
| `{{ name }}` | Name of the invalid value | | ||
|
||
## Changelog | ||
|
||
- `1.1.0` Created |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
<?php | ||
|
||
namespace ProgrammatorDev\Validator\Exception; | ||
|
||
class LanguageException extends ValidationException {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
<?php | ||
|
||
namespace ProgrammatorDev\Validator\Exception; | ||
|
||
class LocaleException extends ValidationException {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
<?php | ||
|
||
namespace ProgrammatorDev\Validator\Rule; | ||
|
||
use ProgrammatorDev\Validator\Exception\LanguageException; | ||
use ProgrammatorDev\Validator\Exception\UnexpectedOptionException; | ||
use ProgrammatorDev\Validator\Exception\UnexpectedTypeException; | ||
use Symfony\Component\Intl\Languages; | ||
|
||
class Language extends AbstractRule implements RuleInterface | ||
{ | ||
public const ALPHA_2_CODE = 'alpha-2'; | ||
public const ALPHA_3_CODE = 'alpha-3'; | ||
|
||
private const CODE_OPTIONS = [ | ||
self::ALPHA_2_CODE, | ||
self::ALPHA_3_CODE | ||
]; | ||
|
||
private string $message = 'The {{ name }} value is not a valid language, {{ value }} given.'; | ||
|
||
public function __construct( | ||
private readonly string $code = self::ALPHA_2_CODE, | ||
?string $message = null | ||
) | ||
{ | ||
$this->message = $message ?? $this->message; | ||
} | ||
|
||
public function assert(mixed $value, ?string $name = null): void | ||
{ | ||
if (!\in_array($this->code, self::CODE_OPTIONS)) { | ||
throw new UnexpectedOptionException('code', self::CODE_OPTIONS, $this->code); | ||
} | ||
|
||
if (!\is_string($value)) { | ||
throw new UnexpectedTypeException('string', get_debug_type($value)); | ||
} | ||
|
||
// keep original value for parameters | ||
$input = \strtolower($value); | ||
|
||
if ( | ||
($this->code === self::ALPHA_2_CODE && !Languages::exists($input)) | ||
|| ($this->code === self::ALPHA_3_CODE && !Languages::alpha3CodeExists($input)) | ||
) { | ||
throw new LanguageException( | ||
message: $this->message, | ||
parameters: [ | ||
'name' => $name, | ||
'value' => $value, | ||
'code' => $this->code | ||
] | ||
); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
<?php | ||
|
||
namespace ProgrammatorDev\Validator\Rule; | ||
|
||
use ProgrammatorDev\Validator\Exception\LocaleException; | ||
use ProgrammatorDev\Validator\Exception\UnexpectedTypeException; | ||
use Symfony\Component\Intl\Locales; | ||
|
||
class Locale extends AbstractRule implements RuleInterface | ||
{ | ||
private string $message = 'The {{ name }} value is not a valid locale, {{ value }} given.'; | ||
|
||
public function __construct( | ||
private readonly bool $canonicalize = false, | ||
?string $message = null | ||
) | ||
{ | ||
$this->message = $message ?? $this->message; | ||
} | ||
|
||
public function assert(mixed $value, ?string $name = null): void | ||
{ | ||
if (!\is_string($value)) { | ||
throw new UnexpectedTypeException('string', get_debug_type($value)); | ||
} | ||
|
||
// keep original value for parameters | ||
$input = $value; | ||
|
||
if ($this->canonicalize) { | ||
$input = \Locale::canonicalize($input); | ||
} | ||
|
||
if (!Locales::exists($input)) { | ||
throw new LocaleException( | ||
message: $this->message, | ||
parameters: [ | ||
'name' => $name, | ||
'value' => $value | ||
] | ||
); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.