diff --git a/docs/03-rules.md b/docs/03-rules.md index 7d5bd3b..39a6c2e 100644 --- a/docs/03-rules.md +++ b/docs/03-rules.md @@ -13,6 +13,7 @@ - [Blank](03-rules_blank.md) - [Count](03-rules_count.md) - [IsNull](03-rules_is-null.md) +- [IsTrue](03-rules_is-true.md) - [NotBlank](03-rules_not-blank.md) - [NotNull](03-rules_not-null.md) - [Type](03-rules_type.md) diff --git a/docs/03-rules_is-true.md b/docs/03-rules_is-true.md new file mode 100644 index 0000000..3594894 --- /dev/null +++ b/docs/03-rules_is-true.md @@ -0,0 +1,35 @@ +# IsTrue + +Validates that a value is `true`. + +```php +IsTrue( + ?string $message = null +); +``` + +## Basic Usage + +```php +// anything else will be false +Validator::isTrue()->validate(true); // true +``` + +## Options + +### `message` + +type: `?string` default: `The {{ name }} value should be true, {{ value }} given.` + +Message that will be shown if the value is true. + +The following parameters are available: + +| Parameter | Description | +|---------------|---------------------------| +| `{{ value }}` | The current invalid value | +| `{{ name }}` | Name of the invalid value | + +## Changelog + +- `1.3.0` Created \ No newline at end of file diff --git a/src/ChainedValidatorInterface.php b/src/ChainedValidatorInterface.php index 035cf9b..1554c93 100644 --- a/src/ChainedValidatorInterface.php +++ b/src/ChainedValidatorInterface.php @@ -84,6 +84,10 @@ public function isNull( ?string $message = null ): ChainedValidatorInterface&Validator; + public function isTrue( + ?string $message = null + ): ChainedValidatorInterface&Validator; + public function language( string $code = 'alpha-2', ?string $message = null diff --git a/src/Exception/IsTrueException.php b/src/Exception/IsTrueException.php new file mode 100644 index 0000000..01e8915 --- /dev/null +++ b/src/Exception/IsTrueException.php @@ -0,0 +1,5 @@ +message = $message ?? $this->message; + } + + public function assert(mixed $value, ?string $name = null): void + { + if ($value !== true) { + throw new IsTrueException( + message: $this->message, + parameters: [ + 'value' => $value, + 'name' => $name + ] + ); + } + } +} \ No newline at end of file diff --git a/src/StaticValidatorInterface.php b/src/StaticValidatorInterface.php index f72dc2b..ffba8c4 100644 --- a/src/StaticValidatorInterface.php +++ b/src/StaticValidatorInterface.php @@ -124,6 +124,10 @@ public static function notNull( ?string $message = null ): ChainedValidatorInterface&Validator; + public static function isTrue( + ?string $message = null + ): ChainedValidatorInterface&Validator; + public static function optional( Validator $validator ): ChainedValidatorInterface&Validator; diff --git a/tests/IsTrueTest.php b/tests/IsTrueTest.php new file mode 100644 index 0000000..da1a6f1 --- /dev/null +++ b/tests/IsTrueTest.php @@ -0,0 +1,43 @@ + [new IsTrue(), 1, $exception, $message]; + yield 'string' => [new IsTrue(), 'string', $exception, $message]; + yield 'false' => [new IsTrue(), false, $exception, $message]; + yield 'array' => [new IsTrue(), [], $exception, $message]; + } + + public static function provideRuleSuccessConditionData(): \Generator + { + yield 'true' => [new IsTrue(), true]; + } + + public static function provideRuleMessageOptionData(): \Generator + { + yield 'message' => [ + new IsTrue( + message: '{{ name }} | {{ value }}' + ), + false, + 'test | false' + ]; + } +} \ No newline at end of file