diff --git a/bin/create-mixin b/bin/create-mixin index 4fe507019..762902355 100755 --- a/bin/create-mixin +++ b/bin/create-mixin @@ -25,9 +25,11 @@ use Respect\Validation\Mixins\StaticNot; use Respect\Validation\Mixins\StaticNullOr; use Respect\Validation\Mixins\StaticProperty; use Respect\Validation\Mixins\StaticUndefOr; +use Respect\Validation\Rules\UndefOr; use Respect\Validation\Validatable; function addMethodToInterface( + string $originalName, InterfaceType $interfaceType, ReflectionClass $reflection, ?string $prefix, @@ -42,7 +44,7 @@ function addMethodToInterface( return; } - $name = $prefix ? $prefix . ucfirst($reflection->getShortName()) : lcfirst($reflection->getShortName()); + $name = $prefix ? $prefix . ucfirst($originalName) : lcfirst($originalName); $method = $interfaceType->addMethod($name)->setPublic()->setReturnType(ChainedValidator::class); if (str_starts_with($interfaceType->getName(), 'Static')) { $method->setStatic(); @@ -65,6 +67,10 @@ function addMethodToInterface( $method->addComment(preg_replace('@(/\*\* *| +\* +| +\*/)@', '', $commend)); } + if ($originalName === 'Optional') { + $method->addComment('@deprecated Use {@see undefOr()} instead.'); + } + foreach ($reflrectionConstructor->getParameters() as $reflectionParameter) { if ($reflectionParameter->isVariadic()) { $method->setVariadic(); @@ -150,6 +156,8 @@ function overwriteFile(string $content, string $basename): void 'KeyExists', 'KeyOptional', 'KeySet', + 'Optional', + 'UndefOr', 'Property', 'PropertyExists', 'PropertyOptional', @@ -160,10 +168,10 @@ function overwriteFile(string $content, string $basename): void ['Length', 'length', $numberRelatedRules, []], ['Max', 'max', $numberRelatedRules, []], ['Min', 'min', $numberRelatedRules, []], - ['Not', 'not', [], ['Not', 'NotEmpty', 'NotBlank', 'NotEmoji', 'NotOptional', 'Optional']], - ['NullOr', 'nullOf', [], ['Nullable', 'Optional']], + ['Not', 'not', [], ['Not', 'NotEmpty', 'NotBlank', 'NotEmoji', 'NotOptional', 'UndefOr', 'Optional']], + ['NullOr', 'nullOf', [], ['Nullable', 'Optional', 'UndefOr']], ['Property', 'property', [], $structureRelatedRules], - ['UndefOr', 'undefOf', [], ['Nullable', 'Optional']], + ['UndefOr', 'undefOr', [], ['Nullable', 'Optional', 'UndefOr']], ['Validator', null, [], []], ]; @@ -179,6 +187,9 @@ function overwriteFile(string $content, string $basename): void continue; } $names[$reflection->getShortName()] = $reflection; + if ($className === UndefOr::class) { + $names['Optional'] = $reflection; + } } ksort($names); @@ -212,9 +223,9 @@ function overwriteFile(string $content, string $basename): void $staticInterface->addExtend(StaticUndefOr::class); } - foreach ($names as $reflection) { - addMethodToInterface($staticInterface, $reflection, $prefix, $allowList, $denyList); - addMethodToInterface($chainedInterface, $reflection, $prefix, $allowList, $denyList); + foreach ($names as $originalName => $reflection) { + addMethodToInterface($originalName, $staticInterface, $reflection, $prefix, $allowList, $denyList); + addMethodToInterface($originalName, $chainedInterface, $reflection, $prefix, $allowList, $denyList); } $printer = new Printer(); diff --git a/docs/rules/Optional.md b/docs/rules/Optional.md deleted file mode 100644 index ab6c68dea..000000000 --- a/docs/rules/Optional.md +++ /dev/null @@ -1,31 +0,0 @@ -# Optional - -- `Optional(Validatable $rule)` - -Validates if the given input is optional or not. By _optional_ we consider `null` -or an empty string (`''`). - -```php -v::optional(v::alpha())->validate(''); // true -v::optional(v::digit())->validate(null); // true -``` - -## Categorization - -- Nesting - -## Changelog - -Version | Description ---------|------------- - 1.0.0 | Created - -*** -See also: - -- [NoWhitespace](NoWhitespace.md) -- [NotBlank](NotBlank.md) -- [NotEmpty](NotEmpty.md) -- [NotOptional](NotOptional.md) -- [NullType](NullType.md) -- [Nullable](Nullable.md) diff --git a/docs/rules/UndefOr.md b/docs/rules/UndefOr.md new file mode 100644 index 000000000..d095aca96 --- /dev/null +++ b/docs/rules/UndefOr.md @@ -0,0 +1,45 @@ +# UndefOr + +- `UndefOr(Validatable $rule)` + +Validates if the given input is undefined or not. + +By _undefined_ we consider `null` or an empty string (`''`), which implies that the input is not set. This is particularly useful when validating form fields + +```php +v::undefOr(v::alpha())->validate(''); // true +v::undefOr(v::digit())->validate(null); // true + +v::undefOr(v::alpha())->validate('username'); // true +v::undefOr(v::alpha())->validate('has1number'); // false +``` + +## Note + +For convenience, you can use the `undefOr` as a prefix to any rule: + +```php +v::undefOrEmail()->validate('not an email'); // false +v::undefOrBetween(1, 3)->validate(2); // true +``` + +## Categorization + +- Nesting + +## Changelog + +| Version | Description | +|--------:|--------------------------------------| +| 3.0.0 | Renamed from "Optional" to "UndefOr" | +| 1.0.0 | Created | + +*** +See also: + +- [NoWhitespace](NoWhitespace.md) +- [NotBlank](NotBlank.md) +- [NotEmpty](NotEmpty.md) +- [NotOptional](NotOptional.md) +- [NullType](NullType.md) +- [Nullable](Nullable.md) diff --git a/library/Factory.php b/library/Factory.php index 07d0efc34..5d391d6e0 100644 --- a/library/Factory.php +++ b/library/Factory.php @@ -17,6 +17,7 @@ use Respect\Validation\Message\Parameter\Raw; use Respect\Validation\Message\Parameter\Stringify; use Respect\Validation\Message\Parameter\Trans; +use Respect\Validation\Transformers\Aliases; use Respect\Validation\Transformers\DeprecatedAttribute; use Respect\Validation\Transformers\DeprecatedKey; use Respect\Validation\Transformers\DeprecatedKeyNested; @@ -59,7 +60,7 @@ public function __construct() new DeprecatedKey( new DeprecatedKeyValue( new DeprecatedMinAndMax( - new DeprecatedKeyNested(new DeprecatedLength(new DeprecatedType(new Prefix()))) + new DeprecatedKeyNested(new DeprecatedLength(new DeprecatedType(new Aliases(new Prefix())))) ) ) ) diff --git a/library/Mixins/ChainedKey.php b/library/Mixins/ChainedKey.php index c3d66a425..a80c4e2b5 100644 --- a/library/Mixins/ChainedKey.php +++ b/library/Mixins/ChainedKey.php @@ -274,8 +274,6 @@ public function keyOneOf( Validatable ...$rules, ): ChainedValidator; - public function keyOptional(int|string $key, Validatable $rule): ChainedValidator; - public function keyPerfectSquare(int|string $key): ChainedValidator; public function keyPesel(int|string $key): ChainedValidator; diff --git a/library/Mixins/ChainedProperty.php b/library/Mixins/ChainedProperty.php index b27156398..82db33f9d 100644 --- a/library/Mixins/ChainedProperty.php +++ b/library/Mixins/ChainedProperty.php @@ -286,8 +286,6 @@ public function propertyOneOf( Validatable ...$rules, ): ChainedValidator; - public function propertyOptional(string $propertyName, Validatable $rule): ChainedValidator; - public function propertyPerfectSquare(string $propertyName): ChainedValidator; public function propertyPesel(string $propertyName): ChainedValidator; diff --git a/library/Mixins/ChainedUndefOr.php b/library/Mixins/ChainedUndefOr.php index 09b51e088..9d10750ff 100644 --- a/library/Mixins/ChainedUndefOr.php +++ b/library/Mixins/ChainedUndefOr.php @@ -13,345 +13,345 @@ interface ChainedUndefOr { - public function undefOfAllOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator; + public function undefOrAllOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator; - public function undefOfAlnum(string ...$additionalChars): ChainedValidator; + public function undefOrAlnum(string ...$additionalChars): ChainedValidator; - public function undefOfAlpha(string ...$additionalChars): ChainedValidator; + public function undefOrAlpha(string ...$additionalChars): ChainedValidator; - public function undefOfAlwaysInvalid(): ChainedValidator; + public function undefOrAlwaysInvalid(): ChainedValidator; - public function undefOfAlwaysValid(): ChainedValidator; + public function undefOrAlwaysValid(): ChainedValidator; - public function undefOfAnyOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator; + public function undefOrAnyOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator; - public function undefOfArrayType(): ChainedValidator; + public function undefOrArrayType(): ChainedValidator; - public function undefOfArrayVal(): ChainedValidator; + public function undefOrArrayVal(): ChainedValidator; - public function undefOfBase( + public function undefOrBase( int $base, string $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ): ChainedValidator; - public function undefOfBase64(): ChainedValidator; + public function undefOrBase64(): ChainedValidator; - public function undefOfBetween(mixed $minValue, mixed $maxValue): ChainedValidator; + public function undefOrBetween(mixed $minValue, mixed $maxValue): ChainedValidator; - public function undefOfBetweenExclusive(mixed $minimum, mixed $maximum): ChainedValidator; + public function undefOrBetweenExclusive(mixed $minimum, mixed $maximum): ChainedValidator; - public function undefOfBoolType(): ChainedValidator; + public function undefOrBoolType(): ChainedValidator; - public function undefOfBoolVal(): ChainedValidator; + public function undefOrBoolVal(): ChainedValidator; - public function undefOfBsn(): ChainedValidator; + public function undefOrBsn(): ChainedValidator; - public function undefOfCall(callable $callable, Validatable $rule): ChainedValidator; + public function undefOrCall(callable $callable, Validatable $rule): ChainedValidator; - public function undefOfCallableType(): ChainedValidator; + public function undefOrCallableType(): ChainedValidator; - public function undefOfCallback(callable $callback, mixed ...$arguments): ChainedValidator; + public function undefOrCallback(callable $callback, mixed ...$arguments): ChainedValidator; - public function undefOfCharset(string $charset, string ...$charsets): ChainedValidator; + public function undefOrCharset(string $charset, string ...$charsets): ChainedValidator; - public function undefOfCnh(): ChainedValidator; + public function undefOrCnh(): ChainedValidator; - public function undefOfCnpj(): ChainedValidator; + public function undefOrCnpj(): ChainedValidator; - public function undefOfConsecutive( + public function undefOrConsecutive( Validatable $rule1, Validatable $rule2, Validatable ...$rules, ): ChainedValidator; - public function undefOfConsonant(string ...$additionalChars): ChainedValidator; + public function undefOrConsonant(string ...$additionalChars): ChainedValidator; - public function undefOfContains(mixed $containsValue, bool $identical = false): ChainedValidator; + public function undefOrContains(mixed $containsValue, bool $identical = false): ChainedValidator; /** * @param non-empty-array $needles */ - public function undefOfContainsAny(array $needles, bool $identical = false): ChainedValidator; + public function undefOrContainsAny(array $needles, bool $identical = false): ChainedValidator; - public function undefOfControl(string ...$additionalChars): ChainedValidator; + public function undefOrControl(string ...$additionalChars): ChainedValidator; - public function undefOfCountable(): ChainedValidator; + public function undefOrCountable(): ChainedValidator; /** * @param "alpha-2"|"alpha-3"|"numeric" $set */ - public function undefOfCountryCode(string $set = 'alpha-2'): ChainedValidator; + public function undefOrCountryCode(string $set = 'alpha-2'): ChainedValidator; - public function undefOfCpf(): ChainedValidator; + public function undefOrCpf(): ChainedValidator; - public function undefOfCreditCard(string $brand = 'Any'): ChainedValidator; + public function undefOrCreditCard(string $brand = 'Any'): ChainedValidator; /** * @param "alpha-3"|"numeric" $set */ - public function undefOfCurrencyCode(string $set = 'alpha-3'): ChainedValidator; + public function undefOrCurrencyCode(string $set = 'alpha-3'): ChainedValidator; - public function undefOfDate(string $format = 'Y-m-d'): ChainedValidator; + public function undefOrDate(string $format = 'Y-m-d'): ChainedValidator; - public function undefOfDateTime(?string $format = null): ChainedValidator; + public function undefOrDateTime(?string $format = null): ChainedValidator; - public function undefOfDecimal(int $decimals): ChainedValidator; + public function undefOrDecimal(int $decimals): ChainedValidator; - public function undefOfDigit(string ...$additionalChars): ChainedValidator; + public function undefOrDigit(string ...$additionalChars): ChainedValidator; - public function undefOfDirectory(): ChainedValidator; + public function undefOrDirectory(): ChainedValidator; - public function undefOfDomain(bool $tldCheck = true): ChainedValidator; + public function undefOrDomain(bool $tldCheck = true): ChainedValidator; - public function undefOfEach(Validatable $rule): ChainedValidator; + public function undefOrEach(Validatable $rule): ChainedValidator; - public function undefOfEmail(): ChainedValidator; + public function undefOrEmail(): ChainedValidator; - public function undefOfEndsWith(mixed $endValue, bool $identical = false): ChainedValidator; + public function undefOrEndsWith(mixed $endValue, bool $identical = false): ChainedValidator; - public function undefOfEquals(mixed $compareTo): ChainedValidator; + public function undefOrEquals(mixed $compareTo): ChainedValidator; - public function undefOfEquivalent(mixed $compareTo): ChainedValidator; + public function undefOrEquivalent(mixed $compareTo): ChainedValidator; - public function undefOfEven(): ChainedValidator; + public function undefOrEven(): ChainedValidator; - public function undefOfExecutable(): ChainedValidator; + public function undefOrExecutable(): ChainedValidator; - public function undefOfExists(): ChainedValidator; + public function undefOrExists(): ChainedValidator; - public function undefOfExtension(string $extension): ChainedValidator; + public function undefOrExtension(string $extension): ChainedValidator; - public function undefOfFactor(int $dividend): ChainedValidator; + public function undefOrFactor(int $dividend): ChainedValidator; - public function undefOfFalseVal(): ChainedValidator; + public function undefOrFalseVal(): ChainedValidator; - public function undefOfFibonacci(): ChainedValidator; + public function undefOrFibonacci(): ChainedValidator; - public function undefOfFile(): ChainedValidator; + public function undefOrFile(): ChainedValidator; - public function undefOfFilterVar(int $filter, mixed $options = null): ChainedValidator; + public function undefOrFilterVar(int $filter, mixed $options = null): ChainedValidator; - public function undefOfFinite(): ChainedValidator; + public function undefOrFinite(): ChainedValidator; - public function undefOfFloatType(): ChainedValidator; + public function undefOrFloatType(): ChainedValidator; - public function undefOfFloatVal(): ChainedValidator; + public function undefOrFloatVal(): ChainedValidator; - public function undefOfGraph(string ...$additionalChars): ChainedValidator; + public function undefOrGraph(string ...$additionalChars): ChainedValidator; - public function undefOfGreaterThan(mixed $compareTo): ChainedValidator; + public function undefOrGreaterThan(mixed $compareTo): ChainedValidator; - public function undefOfGreaterThanOrEqual(mixed $compareTo): ChainedValidator; + public function undefOrGreaterThanOrEqual(mixed $compareTo): ChainedValidator; - public function undefOfHetu(): ChainedValidator; + public function undefOrHetu(): ChainedValidator; - public function undefOfHexRgbColor(): ChainedValidator; + public function undefOrHexRgbColor(): ChainedValidator; - public function undefOfIban(): ChainedValidator; + public function undefOrIban(): ChainedValidator; - public function undefOfIdentical(mixed $compareTo): ChainedValidator; + public function undefOrIdentical(mixed $compareTo): ChainedValidator; - public function undefOfImage(): ChainedValidator; + public function undefOrImage(): ChainedValidator; - public function undefOfImei(): ChainedValidator; + public function undefOrImei(): ChainedValidator; - public function undefOfIn(mixed $haystack, bool $compareIdentical = false): ChainedValidator; + public function undefOrIn(mixed $haystack, bool $compareIdentical = false): ChainedValidator; - public function undefOfInfinite(): ChainedValidator; + public function undefOrInfinite(): ChainedValidator; /** * @param class-string $class */ - public function undefOfInstance(string $class): ChainedValidator; + public function undefOrInstance(string $class): ChainedValidator; - public function undefOfIntType(): ChainedValidator; + public function undefOrIntType(): ChainedValidator; - public function undefOfIntVal(): ChainedValidator; + public function undefOrIntVal(): ChainedValidator; - public function undefOfIp(string $range = '*', ?int $options = null): ChainedValidator; + public function undefOrIp(string $range = '*', ?int $options = null): ChainedValidator; - public function undefOfIsbn(): ChainedValidator; + public function undefOrIsbn(): ChainedValidator; - public function undefOfIterableType(): ChainedValidator; + public function undefOrIterableType(): ChainedValidator; - public function undefOfIterableVal(): ChainedValidator; + public function undefOrIterableVal(): ChainedValidator; - public function undefOfJson(): ChainedValidator; + public function undefOrJson(): ChainedValidator; - public function undefOfKey(string|int $key, Validatable $rule): ChainedValidator; + public function undefOrKey(string|int $key, Validatable $rule): ChainedValidator; - public function undefOfKeyExists(string|int $key): ChainedValidator; + public function undefOrKeyExists(string|int $key): ChainedValidator; - public function undefOfKeyOptional(string|int $key, Validatable $rule): ChainedValidator; + public function undefOrKeyOptional(string|int $key, Validatable $rule): ChainedValidator; - public function undefOfKeySet(Validatable $rule, Validatable ...$rules): ChainedValidator; + public function undefOrKeySet(Validatable $rule, Validatable ...$rules): ChainedValidator; /** * @param "alpha-2"|"alpha-3" $set */ - public function undefOfLanguageCode(string $set = 'alpha-2'): ChainedValidator; + public function undefOrLanguageCode(string $set = 'alpha-2'): ChainedValidator; /** * @param callable(mixed): Validatable $ruleCreator */ - public function undefOfLazy(callable $ruleCreator): ChainedValidator; + public function undefOrLazy(callable $ruleCreator): ChainedValidator; - public function undefOfLeapDate(string $format): ChainedValidator; + public function undefOrLeapDate(string $format): ChainedValidator; - public function undefOfLeapYear(): ChainedValidator; + public function undefOrLeapYear(): ChainedValidator; - public function undefOfLength(Validatable $rule): ChainedValidator; + public function undefOrLength(Validatable $rule): ChainedValidator; - public function undefOfLessThan(mixed $compareTo): ChainedValidator; + public function undefOrLessThan(mixed $compareTo): ChainedValidator; - public function undefOfLessThanOrEqual(mixed $compareTo): ChainedValidator; + public function undefOrLessThanOrEqual(mixed $compareTo): ChainedValidator; - public function undefOfLowercase(): ChainedValidator; + public function undefOrLowercase(): ChainedValidator; - public function undefOfLuhn(): ChainedValidator; + public function undefOrLuhn(): ChainedValidator; - public function undefOfMacAddress(): ChainedValidator; + public function undefOrMacAddress(): ChainedValidator; - public function undefOfMax(Validatable $rule): ChainedValidator; + public function undefOrMax(Validatable $rule): ChainedValidator; - public function undefOfMaxAge(int $age, ?string $format = null): ChainedValidator; + public function undefOrMaxAge(int $age, ?string $format = null): ChainedValidator; - public function undefOfMimetype(string $mimetype): ChainedValidator; + public function undefOrMimetype(string $mimetype): ChainedValidator; - public function undefOfMin(Validatable $rule): ChainedValidator; + public function undefOrMin(Validatable $rule): ChainedValidator; - public function undefOfMinAge(int $age, ?string $format = null): ChainedValidator; + public function undefOrMinAge(int $age, ?string $format = null): ChainedValidator; - public function undefOfMultiple(int $multipleOf): ChainedValidator; + public function undefOrMultiple(int $multipleOf): ChainedValidator; - public function undefOfNegative(): ChainedValidator; + public function undefOrNegative(): ChainedValidator; - public function undefOfNfeAccessKey(): ChainedValidator; + public function undefOrNfeAccessKey(): ChainedValidator; - public function undefOfNif(): ChainedValidator; + public function undefOrNif(): ChainedValidator; - public function undefOfNip(): ChainedValidator; + public function undefOrNip(): ChainedValidator; - public function undefOfNo(bool $useLocale = false): ChainedValidator; + public function undefOrNo(bool $useLocale = false): ChainedValidator; - public function undefOfNoWhitespace(): ChainedValidator; + public function undefOrNoWhitespace(): ChainedValidator; - public function undefOfNoneOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator; + public function undefOrNoneOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator; - public function undefOfNot(Validatable $rule): ChainedValidator; + public function undefOrNot(Validatable $rule): ChainedValidator; - public function undefOfNotBlank(): ChainedValidator; + public function undefOrNotBlank(): ChainedValidator; - public function undefOfNotEmoji(): ChainedValidator; + public function undefOrNotEmoji(): ChainedValidator; - public function undefOfNotEmpty(): ChainedValidator; + public function undefOrNotEmpty(): ChainedValidator; - public function undefOfNotOptional(): ChainedValidator; + public function undefOrNotOptional(): ChainedValidator; - public function undefOfNullType(): ChainedValidator; + public function undefOrNullType(): ChainedValidator; - public function undefOfNumber(): ChainedValidator; + public function undefOrNumber(): ChainedValidator; - public function undefOfNumericVal(): ChainedValidator; + public function undefOrNumericVal(): ChainedValidator; - public function undefOfObjectType(): ChainedValidator; + public function undefOrObjectType(): ChainedValidator; - public function undefOfOdd(): ChainedValidator; + public function undefOrOdd(): ChainedValidator; - public function undefOfOneOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator; + public function undefOrOneOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator; - public function undefOfPerfectSquare(): ChainedValidator; + public function undefOrPerfectSquare(): ChainedValidator; - public function undefOfPesel(): ChainedValidator; + public function undefOrPesel(): ChainedValidator; - public function undefOfPhone(?string $countryCode = null): ChainedValidator; + public function undefOrPhone(?string $countryCode = null): ChainedValidator; - public function undefOfPhpLabel(): ChainedValidator; + public function undefOrPhpLabel(): ChainedValidator; - public function undefOfPis(): ChainedValidator; + public function undefOrPis(): ChainedValidator; - public function undefOfPolishIdCard(): ChainedValidator; + public function undefOrPolishIdCard(): ChainedValidator; - public function undefOfPortugueseNif(): ChainedValidator; + public function undefOrPortugueseNif(): ChainedValidator; - public function undefOfPositive(): ChainedValidator; + public function undefOrPositive(): ChainedValidator; - public function undefOfPostalCode(string $countryCode, bool $formatted = false): ChainedValidator; + public function undefOrPostalCode(string $countryCode, bool $formatted = false): ChainedValidator; - public function undefOfPrimeNumber(): ChainedValidator; + public function undefOrPrimeNumber(): ChainedValidator; - public function undefOfPrintable(string ...$additionalChars): ChainedValidator; + public function undefOrPrintable(string ...$additionalChars): ChainedValidator; - public function undefOfProperty(string $propertyName, Validatable $rule): ChainedValidator; + public function undefOrProperty(string $propertyName, Validatable $rule): ChainedValidator; - public function undefOfPropertyExists(string $propertyName): ChainedValidator; + public function undefOrPropertyExists(string $propertyName): ChainedValidator; - public function undefOfPropertyOptional(string $propertyName, Validatable $rule): ChainedValidator; + public function undefOrPropertyOptional(string $propertyName, Validatable $rule): ChainedValidator; - public function undefOfPublicDomainSuffix(): ChainedValidator; + public function undefOrPublicDomainSuffix(): ChainedValidator; - public function undefOfPunct(string ...$additionalChars): ChainedValidator; + public function undefOrPunct(string ...$additionalChars): ChainedValidator; - public function undefOfReadable(): ChainedValidator; + public function undefOrReadable(): ChainedValidator; - public function undefOfRegex(string $regex): ChainedValidator; + public function undefOrRegex(string $regex): ChainedValidator; - public function undefOfResourceType(): ChainedValidator; + public function undefOrResourceType(): ChainedValidator; - public function undefOfRoman(): ChainedValidator; + public function undefOrRoman(): ChainedValidator; - public function undefOfScalarVal(): ChainedValidator; + public function undefOrScalarVal(): ChainedValidator; - public function undefOfSize(string|int|null $minSize = null, string|int|null $maxSize = null): ChainedValidator; + public function undefOrSize(string|int|null $minSize = null, string|int|null $maxSize = null): ChainedValidator; - public function undefOfSlug(): ChainedValidator; + public function undefOrSlug(): ChainedValidator; - public function undefOfSorted(string $direction): ChainedValidator; + public function undefOrSorted(string $direction): ChainedValidator; - public function undefOfSpace(string ...$additionalChars): ChainedValidator; + public function undefOrSpace(string ...$additionalChars): ChainedValidator; - public function undefOfStartsWith(mixed $startValue, bool $identical = false): ChainedValidator; + public function undefOrStartsWith(mixed $startValue, bool $identical = false): ChainedValidator; - public function undefOfStringType(): ChainedValidator; + public function undefOrStringType(): ChainedValidator; - public function undefOfStringVal(): ChainedValidator; + public function undefOrStringVal(): ChainedValidator; - public function undefOfSubdivisionCode(string $countryCode): ChainedValidator; + public function undefOrSubdivisionCode(string $countryCode): ChainedValidator; /** * @param mixed[] $superset */ - public function undefOfSubset(array $superset): ChainedValidator; + public function undefOrSubset(array $superset): ChainedValidator; - public function undefOfSymbolicLink(): ChainedValidator; + public function undefOrSymbolicLink(): ChainedValidator; - public function undefOfTime(string $format = 'H:i:s'): ChainedValidator; + public function undefOrTime(string $format = 'H:i:s'): ChainedValidator; - public function undefOfTld(): ChainedValidator; + public function undefOrTld(): ChainedValidator; - public function undefOfTrueVal(): ChainedValidator; + public function undefOrTrueVal(): ChainedValidator; - public function undefOfUnique(): ChainedValidator; + public function undefOrUnique(): ChainedValidator; - public function undefOfUploaded(): ChainedValidator; + public function undefOrUploaded(): ChainedValidator; - public function undefOfUppercase(): ChainedValidator; + public function undefOrUppercase(): ChainedValidator; - public function undefOfUrl(): ChainedValidator; + public function undefOrUrl(): ChainedValidator; - public function undefOfUuid(?int $version = null): ChainedValidator; + public function undefOrUuid(?int $version = null): ChainedValidator; - public function undefOfVersion(): ChainedValidator; + public function undefOrVersion(): ChainedValidator; - public function undefOfVideoUrl(?string $service = null): ChainedValidator; + public function undefOrVideoUrl(?string $service = null): ChainedValidator; - public function undefOfVowel(string ...$additionalChars): ChainedValidator; + public function undefOrVowel(string ...$additionalChars): ChainedValidator; - public function undefOfWhen(Validatable $when, Validatable $then, ?Validatable $else = null): ChainedValidator; + public function undefOrWhen(Validatable $when, Validatable $then, ?Validatable $else = null): ChainedValidator; - public function undefOfWritable(): ChainedValidator; + public function undefOrWritable(): ChainedValidator; - public function undefOfXdigit(string ...$additionalChars): ChainedValidator; + public function undefOrXdigit(string ...$additionalChars): ChainedValidator; - public function undefOfYes(bool $useLocale = false): ChainedValidator; + public function undefOrYes(bool $useLocale = false): ChainedValidator; } diff --git a/library/Mixins/ChainedValidator.php b/library/Mixins/ChainedValidator.php index 1c3b818cd..39ce9d66c 100644 --- a/library/Mixins/ChainedValidator.php +++ b/library/Mixins/ChainedValidator.php @@ -267,6 +267,9 @@ public function odd(): ChainedValidator; public function oneOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator; + /** + * @deprecated Use {@see undefOr()} instead. + */ public function optional(Validatable $rule): ChainedValidator; public function perfectSquare(): ChainedValidator; @@ -340,6 +343,8 @@ public function tld(): ChainedValidator; public function trueVal(): ChainedValidator; + public function undefOr(Validatable $rule): ChainedValidator; + public function unique(): ChainedValidator; public function uploaded(): ChainedValidator; diff --git a/library/Mixins/StaticKey.php b/library/Mixins/StaticKey.php index fc6d6cc3c..dfc76401d 100644 --- a/library/Mixins/StaticKey.php +++ b/library/Mixins/StaticKey.php @@ -278,8 +278,6 @@ public static function keyOneOf( Validatable ...$rules, ): ChainedValidator; - public static function keyOptional(int|string $key, Validatable $rule): ChainedValidator; - public static function keyPerfectSquare(int|string $key): ChainedValidator; public static function keyPesel(int|string $key): ChainedValidator; diff --git a/library/Mixins/StaticProperty.php b/library/Mixins/StaticProperty.php index ed80fe9ee..f438a5cce 100644 --- a/library/Mixins/StaticProperty.php +++ b/library/Mixins/StaticProperty.php @@ -310,8 +310,6 @@ public static function propertyOneOf( Validatable ...$rules, ): ChainedValidator; - public static function propertyOptional(string $propertyName, Validatable $rule): ChainedValidator; - public static function propertyPerfectSquare(string $propertyName): ChainedValidator; public static function propertyPesel(string $propertyName): ChainedValidator; diff --git a/library/Mixins/StaticUndefOr.php b/library/Mixins/StaticUndefOr.php index 49b18e197..ae3aa763b 100644 --- a/library/Mixins/StaticUndefOr.php +++ b/library/Mixins/StaticUndefOr.php @@ -13,368 +13,368 @@ interface StaticUndefOr { - public static function undefOfAllOf( + public static function undefOrAllOf( Validatable $rule1, Validatable $rule2, Validatable ...$rules, ): ChainedValidator; - public static function undefOfAlnum(string ...$additionalChars): ChainedValidator; + public static function undefOrAlnum(string ...$additionalChars): ChainedValidator; - public static function undefOfAlpha(string ...$additionalChars): ChainedValidator; + public static function undefOrAlpha(string ...$additionalChars): ChainedValidator; - public static function undefOfAlwaysInvalid(): ChainedValidator; + public static function undefOrAlwaysInvalid(): ChainedValidator; - public static function undefOfAlwaysValid(): ChainedValidator; + public static function undefOrAlwaysValid(): ChainedValidator; - public static function undefOfAnyOf( + public static function undefOrAnyOf( Validatable $rule1, Validatable $rule2, Validatable ...$rules, ): ChainedValidator; - public static function undefOfArrayType(): ChainedValidator; + public static function undefOrArrayType(): ChainedValidator; - public static function undefOfArrayVal(): ChainedValidator; + public static function undefOrArrayVal(): ChainedValidator; - public static function undefOfBase( + public static function undefOrBase( int $base, string $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ): ChainedValidator; - public static function undefOfBase64(): ChainedValidator; + public static function undefOrBase64(): ChainedValidator; - public static function undefOfBetween(mixed $minValue, mixed $maxValue): ChainedValidator; + public static function undefOrBetween(mixed $minValue, mixed $maxValue): ChainedValidator; - public static function undefOfBetweenExclusive(mixed $minimum, mixed $maximum): ChainedValidator; + public static function undefOrBetweenExclusive(mixed $minimum, mixed $maximum): ChainedValidator; - public static function undefOfBoolType(): ChainedValidator; + public static function undefOrBoolType(): ChainedValidator; - public static function undefOfBoolVal(): ChainedValidator; + public static function undefOrBoolVal(): ChainedValidator; - public static function undefOfBsn(): ChainedValidator; + public static function undefOrBsn(): ChainedValidator; - public static function undefOfCall(callable $callable, Validatable $rule): ChainedValidator; + public static function undefOrCall(callable $callable, Validatable $rule): ChainedValidator; - public static function undefOfCallableType(): ChainedValidator; + public static function undefOrCallableType(): ChainedValidator; - public static function undefOfCallback(callable $callback, mixed ...$arguments): ChainedValidator; + public static function undefOrCallback(callable $callback, mixed ...$arguments): ChainedValidator; - public static function undefOfCharset(string $charset, string ...$charsets): ChainedValidator; + public static function undefOrCharset(string $charset, string ...$charsets): ChainedValidator; - public static function undefOfCnh(): ChainedValidator; + public static function undefOrCnh(): ChainedValidator; - public static function undefOfCnpj(): ChainedValidator; + public static function undefOrCnpj(): ChainedValidator; - public static function undefOfConsecutive( + public static function undefOrConsecutive( Validatable $rule1, Validatable $rule2, Validatable ...$rules, ): ChainedValidator; - public static function undefOfConsonant(string ...$additionalChars): ChainedValidator; + public static function undefOrConsonant(string ...$additionalChars): ChainedValidator; - public static function undefOfContains(mixed $containsValue, bool $identical = false): ChainedValidator; + public static function undefOrContains(mixed $containsValue, bool $identical = false): ChainedValidator; /** * @param non-empty-array $needles */ - public static function undefOfContainsAny(array $needles, bool $identical = false): ChainedValidator; + public static function undefOrContainsAny(array $needles, bool $identical = false): ChainedValidator; - public static function undefOfControl(string ...$additionalChars): ChainedValidator; + public static function undefOrControl(string ...$additionalChars): ChainedValidator; - public static function undefOfCountable(): ChainedValidator; + public static function undefOrCountable(): ChainedValidator; /** * @param "alpha-2"|"alpha-3"|"numeric" $set */ - public static function undefOfCountryCode(string $set = 'alpha-2'): ChainedValidator; + public static function undefOrCountryCode(string $set = 'alpha-2'): ChainedValidator; - public static function undefOfCpf(): ChainedValidator; + public static function undefOrCpf(): ChainedValidator; - public static function undefOfCreditCard(string $brand = 'Any'): ChainedValidator; + public static function undefOrCreditCard(string $brand = 'Any'): ChainedValidator; /** * @param "alpha-3"|"numeric" $set */ - public static function undefOfCurrencyCode(string $set = 'alpha-3'): ChainedValidator; + public static function undefOrCurrencyCode(string $set = 'alpha-3'): ChainedValidator; - public static function undefOfDate(string $format = 'Y-m-d'): ChainedValidator; + public static function undefOrDate(string $format = 'Y-m-d'): ChainedValidator; - public static function undefOfDateTime(?string $format = null): ChainedValidator; + public static function undefOrDateTime(?string $format = null): ChainedValidator; - public static function undefOfDecimal(int $decimals): ChainedValidator; + public static function undefOrDecimal(int $decimals): ChainedValidator; - public static function undefOfDigit(string ...$additionalChars): ChainedValidator; + public static function undefOrDigit(string ...$additionalChars): ChainedValidator; - public static function undefOfDirectory(): ChainedValidator; + public static function undefOrDirectory(): ChainedValidator; - public static function undefOfDomain(bool $tldCheck = true): ChainedValidator; + public static function undefOrDomain(bool $tldCheck = true): ChainedValidator; - public static function undefOfEach(Validatable $rule): ChainedValidator; + public static function undefOrEach(Validatable $rule): ChainedValidator; - public static function undefOfEmail(): ChainedValidator; + public static function undefOrEmail(): ChainedValidator; - public static function undefOfEndsWith(mixed $endValue, bool $identical = false): ChainedValidator; + public static function undefOrEndsWith(mixed $endValue, bool $identical = false): ChainedValidator; - public static function undefOfEquals(mixed $compareTo): ChainedValidator; + public static function undefOrEquals(mixed $compareTo): ChainedValidator; - public static function undefOfEquivalent(mixed $compareTo): ChainedValidator; + public static function undefOrEquivalent(mixed $compareTo): ChainedValidator; - public static function undefOfEven(): ChainedValidator; + public static function undefOrEven(): ChainedValidator; - public static function undefOfExecutable(): ChainedValidator; + public static function undefOrExecutable(): ChainedValidator; - public static function undefOfExists(): ChainedValidator; + public static function undefOrExists(): ChainedValidator; - public static function undefOfExtension(string $extension): ChainedValidator; + public static function undefOrExtension(string $extension): ChainedValidator; - public static function undefOfFactor(int $dividend): ChainedValidator; + public static function undefOrFactor(int $dividend): ChainedValidator; - public static function undefOfFalseVal(): ChainedValidator; + public static function undefOrFalseVal(): ChainedValidator; - public static function undefOfFibonacci(): ChainedValidator; + public static function undefOrFibonacci(): ChainedValidator; - public static function undefOfFile(): ChainedValidator; + public static function undefOrFile(): ChainedValidator; - public static function undefOfFilterVar(int $filter, mixed $options = null): ChainedValidator; + public static function undefOrFilterVar(int $filter, mixed $options = null): ChainedValidator; - public static function undefOfFinite(): ChainedValidator; + public static function undefOrFinite(): ChainedValidator; - public static function undefOfFloatType(): ChainedValidator; + public static function undefOrFloatType(): ChainedValidator; - public static function undefOfFloatVal(): ChainedValidator; + public static function undefOrFloatVal(): ChainedValidator; - public static function undefOfGraph(string ...$additionalChars): ChainedValidator; + public static function undefOrGraph(string ...$additionalChars): ChainedValidator; - public static function undefOfGreaterThan(mixed $compareTo): ChainedValidator; + public static function undefOrGreaterThan(mixed $compareTo): ChainedValidator; - public static function undefOfGreaterThanOrEqual(mixed $compareTo): ChainedValidator; + public static function undefOrGreaterThanOrEqual(mixed $compareTo): ChainedValidator; - public static function undefOfHetu(): ChainedValidator; + public static function undefOrHetu(): ChainedValidator; - public static function undefOfHexRgbColor(): ChainedValidator; + public static function undefOrHexRgbColor(): ChainedValidator; - public static function undefOfIban(): ChainedValidator; + public static function undefOrIban(): ChainedValidator; - public static function undefOfIdentical(mixed $compareTo): ChainedValidator; + public static function undefOrIdentical(mixed $compareTo): ChainedValidator; - public static function undefOfImage(): ChainedValidator; + public static function undefOrImage(): ChainedValidator; - public static function undefOfImei(): ChainedValidator; + public static function undefOrImei(): ChainedValidator; - public static function undefOfIn(mixed $haystack, bool $compareIdentical = false): ChainedValidator; + public static function undefOrIn(mixed $haystack, bool $compareIdentical = false): ChainedValidator; - public static function undefOfInfinite(): ChainedValidator; + public static function undefOrInfinite(): ChainedValidator; /** * @param class-string $class */ - public static function undefOfInstance(string $class): ChainedValidator; + public static function undefOrInstance(string $class): ChainedValidator; - public static function undefOfIntType(): ChainedValidator; + public static function undefOrIntType(): ChainedValidator; - public static function undefOfIntVal(): ChainedValidator; + public static function undefOrIntVal(): ChainedValidator; - public static function undefOfIp(string $range = '*', ?int $options = null): ChainedValidator; + public static function undefOrIp(string $range = '*', ?int $options = null): ChainedValidator; - public static function undefOfIsbn(): ChainedValidator; + public static function undefOrIsbn(): ChainedValidator; - public static function undefOfIterableType(): ChainedValidator; + public static function undefOrIterableType(): ChainedValidator; - public static function undefOfIterableVal(): ChainedValidator; + public static function undefOrIterableVal(): ChainedValidator; - public static function undefOfJson(): ChainedValidator; + public static function undefOrJson(): ChainedValidator; - public static function undefOfKey(string|int $key, Validatable $rule): ChainedValidator; + public static function undefOrKey(string|int $key, Validatable $rule): ChainedValidator; - public static function undefOfKeyExists(string|int $key): ChainedValidator; + public static function undefOrKeyExists(string|int $key): ChainedValidator; - public static function undefOfKeyOptional(string|int $key, Validatable $rule): ChainedValidator; + public static function undefOrKeyOptional(string|int $key, Validatable $rule): ChainedValidator; - public static function undefOfKeySet(Validatable $rule, Validatable ...$rules): ChainedValidator; + public static function undefOrKeySet(Validatable $rule, Validatable ...$rules): ChainedValidator; /** * @param "alpha-2"|"alpha-3" $set */ - public static function undefOfLanguageCode(string $set = 'alpha-2'): ChainedValidator; + public static function undefOrLanguageCode(string $set = 'alpha-2'): ChainedValidator; /** * @param callable(mixed): Validatable $ruleCreator */ - public static function undefOfLazy(callable $ruleCreator): ChainedValidator; + public static function undefOrLazy(callable $ruleCreator): ChainedValidator; - public static function undefOfLeapDate(string $format): ChainedValidator; + public static function undefOrLeapDate(string $format): ChainedValidator; - public static function undefOfLeapYear(): ChainedValidator; + public static function undefOrLeapYear(): ChainedValidator; - public static function undefOfLength(Validatable $rule): ChainedValidator; + public static function undefOrLength(Validatable $rule): ChainedValidator; - public static function undefOfLessThan(mixed $compareTo): ChainedValidator; + public static function undefOrLessThan(mixed $compareTo): ChainedValidator; - public static function undefOfLessThanOrEqual(mixed $compareTo): ChainedValidator; + public static function undefOrLessThanOrEqual(mixed $compareTo): ChainedValidator; - public static function undefOfLowercase(): ChainedValidator; + public static function undefOrLowercase(): ChainedValidator; - public static function undefOfLuhn(): ChainedValidator; + public static function undefOrLuhn(): ChainedValidator; - public static function undefOfMacAddress(): ChainedValidator; + public static function undefOrMacAddress(): ChainedValidator; - public static function undefOfMax(Validatable $rule): ChainedValidator; + public static function undefOrMax(Validatable $rule): ChainedValidator; - public static function undefOfMaxAge(int $age, ?string $format = null): ChainedValidator; + public static function undefOrMaxAge(int $age, ?string $format = null): ChainedValidator; - public static function undefOfMimetype(string $mimetype): ChainedValidator; + public static function undefOrMimetype(string $mimetype): ChainedValidator; - public static function undefOfMin(Validatable $rule): ChainedValidator; + public static function undefOrMin(Validatable $rule): ChainedValidator; - public static function undefOfMinAge(int $age, ?string $format = null): ChainedValidator; + public static function undefOrMinAge(int $age, ?string $format = null): ChainedValidator; - public static function undefOfMultiple(int $multipleOf): ChainedValidator; + public static function undefOrMultiple(int $multipleOf): ChainedValidator; - public static function undefOfNegative(): ChainedValidator; + public static function undefOrNegative(): ChainedValidator; - public static function undefOfNfeAccessKey(): ChainedValidator; + public static function undefOrNfeAccessKey(): ChainedValidator; - public static function undefOfNif(): ChainedValidator; + public static function undefOrNif(): ChainedValidator; - public static function undefOfNip(): ChainedValidator; + public static function undefOrNip(): ChainedValidator; - public static function undefOfNo(bool $useLocale = false): ChainedValidator; + public static function undefOrNo(bool $useLocale = false): ChainedValidator; - public static function undefOfNoWhitespace(): ChainedValidator; + public static function undefOrNoWhitespace(): ChainedValidator; - public static function undefOfNoneOf( + public static function undefOrNoneOf( Validatable $rule1, Validatable $rule2, Validatable ...$rules, ): ChainedValidator; - public static function undefOfNot(Validatable $rule): ChainedValidator; + public static function undefOrNot(Validatable $rule): ChainedValidator; - public static function undefOfNotBlank(): ChainedValidator; + public static function undefOrNotBlank(): ChainedValidator; - public static function undefOfNotEmoji(): ChainedValidator; + public static function undefOrNotEmoji(): ChainedValidator; - public static function undefOfNotEmpty(): ChainedValidator; + public static function undefOrNotEmpty(): ChainedValidator; - public static function undefOfNotOptional(): ChainedValidator; + public static function undefOrNotOptional(): ChainedValidator; - public static function undefOfNullType(): ChainedValidator; + public static function undefOrNullType(): ChainedValidator; - public static function undefOfNumber(): ChainedValidator; + public static function undefOrNumber(): ChainedValidator; - public static function undefOfNumericVal(): ChainedValidator; + public static function undefOrNumericVal(): ChainedValidator; - public static function undefOfObjectType(): ChainedValidator; + public static function undefOrObjectType(): ChainedValidator; - public static function undefOfOdd(): ChainedValidator; + public static function undefOrOdd(): ChainedValidator; - public static function undefOfOneOf( + public static function undefOrOneOf( Validatable $rule1, Validatable $rule2, Validatable ...$rules, ): ChainedValidator; - public static function undefOfPerfectSquare(): ChainedValidator; + public static function undefOrPerfectSquare(): ChainedValidator; - public static function undefOfPesel(): ChainedValidator; + public static function undefOrPesel(): ChainedValidator; - public static function undefOfPhone(?string $countryCode = null): ChainedValidator; + public static function undefOrPhone(?string $countryCode = null): ChainedValidator; - public static function undefOfPhpLabel(): ChainedValidator; + public static function undefOrPhpLabel(): ChainedValidator; - public static function undefOfPis(): ChainedValidator; + public static function undefOrPis(): ChainedValidator; - public static function undefOfPolishIdCard(): ChainedValidator; + public static function undefOrPolishIdCard(): ChainedValidator; - public static function undefOfPortugueseNif(): ChainedValidator; + public static function undefOrPortugueseNif(): ChainedValidator; - public static function undefOfPositive(): ChainedValidator; + public static function undefOrPositive(): ChainedValidator; - public static function undefOfPostalCode(string $countryCode, bool $formatted = false): ChainedValidator; + public static function undefOrPostalCode(string $countryCode, bool $formatted = false): ChainedValidator; - public static function undefOfPrimeNumber(): ChainedValidator; + public static function undefOrPrimeNumber(): ChainedValidator; - public static function undefOfPrintable(string ...$additionalChars): ChainedValidator; + public static function undefOrPrintable(string ...$additionalChars): ChainedValidator; - public static function undefOfProperty(string $propertyName, Validatable $rule): ChainedValidator; + public static function undefOrProperty(string $propertyName, Validatable $rule): ChainedValidator; - public static function undefOfPropertyExists(string $propertyName): ChainedValidator; + public static function undefOrPropertyExists(string $propertyName): ChainedValidator; - public static function undefOfPropertyOptional(string $propertyName, Validatable $rule): ChainedValidator; + public static function undefOrPropertyOptional(string $propertyName, Validatable $rule): ChainedValidator; - public static function undefOfPublicDomainSuffix(): ChainedValidator; + public static function undefOrPublicDomainSuffix(): ChainedValidator; - public static function undefOfPunct(string ...$additionalChars): ChainedValidator; + public static function undefOrPunct(string ...$additionalChars): ChainedValidator; - public static function undefOfReadable(): ChainedValidator; + public static function undefOrReadable(): ChainedValidator; - public static function undefOfRegex(string $regex): ChainedValidator; + public static function undefOrRegex(string $regex): ChainedValidator; - public static function undefOfResourceType(): ChainedValidator; + public static function undefOrResourceType(): ChainedValidator; - public static function undefOfRoman(): ChainedValidator; + public static function undefOrRoman(): ChainedValidator; - public static function undefOfScalarVal(): ChainedValidator; + public static function undefOrScalarVal(): ChainedValidator; - public static function undefOfSize( + public static function undefOrSize( string|int|null $minSize = null, string|int|null $maxSize = null, ): ChainedValidator; - public static function undefOfSlug(): ChainedValidator; + public static function undefOrSlug(): ChainedValidator; - public static function undefOfSorted(string $direction): ChainedValidator; + public static function undefOrSorted(string $direction): ChainedValidator; - public static function undefOfSpace(string ...$additionalChars): ChainedValidator; + public static function undefOrSpace(string ...$additionalChars): ChainedValidator; - public static function undefOfStartsWith(mixed $startValue, bool $identical = false): ChainedValidator; + public static function undefOrStartsWith(mixed $startValue, bool $identical = false): ChainedValidator; - public static function undefOfStringType(): ChainedValidator; + public static function undefOrStringType(): ChainedValidator; - public static function undefOfStringVal(): ChainedValidator; + public static function undefOrStringVal(): ChainedValidator; - public static function undefOfSubdivisionCode(string $countryCode): ChainedValidator; + public static function undefOrSubdivisionCode(string $countryCode): ChainedValidator; /** * @param mixed[] $superset */ - public static function undefOfSubset(array $superset): ChainedValidator; + public static function undefOrSubset(array $superset): ChainedValidator; - public static function undefOfSymbolicLink(): ChainedValidator; + public static function undefOrSymbolicLink(): ChainedValidator; - public static function undefOfTime(string $format = 'H:i:s'): ChainedValidator; + public static function undefOrTime(string $format = 'H:i:s'): ChainedValidator; - public static function undefOfTld(): ChainedValidator; + public static function undefOrTld(): ChainedValidator; - public static function undefOfTrueVal(): ChainedValidator; + public static function undefOrTrueVal(): ChainedValidator; - public static function undefOfUnique(): ChainedValidator; + public static function undefOrUnique(): ChainedValidator; - public static function undefOfUploaded(): ChainedValidator; + public static function undefOrUploaded(): ChainedValidator; - public static function undefOfUppercase(): ChainedValidator; + public static function undefOrUppercase(): ChainedValidator; - public static function undefOfUrl(): ChainedValidator; + public static function undefOrUrl(): ChainedValidator; - public static function undefOfUuid(?int $version = null): ChainedValidator; + public static function undefOrUuid(?int $version = null): ChainedValidator; - public static function undefOfVersion(): ChainedValidator; + public static function undefOrVersion(): ChainedValidator; - public static function undefOfVideoUrl(?string $service = null): ChainedValidator; + public static function undefOrVideoUrl(?string $service = null): ChainedValidator; - public static function undefOfVowel(string ...$additionalChars): ChainedValidator; + public static function undefOrVowel(string ...$additionalChars): ChainedValidator; - public static function undefOfWhen( + public static function undefOrWhen( Validatable $when, Validatable $then, ?Validatable $else = null, ): ChainedValidator; - public static function undefOfWritable(): ChainedValidator; + public static function undefOrWritable(): ChainedValidator; - public static function undefOfXdigit(string ...$additionalChars): ChainedValidator; + public static function undefOrXdigit(string ...$additionalChars): ChainedValidator; - public static function undefOfYes(bool $useLocale = false): ChainedValidator; + public static function undefOrYes(bool $useLocale = false): ChainedValidator; } diff --git a/library/Mixins/StaticValidator.php b/library/Mixins/StaticValidator.php index 0c0836461..c3dbfbc02 100644 --- a/library/Mixins/StaticValidator.php +++ b/library/Mixins/StaticValidator.php @@ -270,6 +270,9 @@ public static function odd(): ChainedValidator; public static function oneOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator; + /** + * @deprecated Use {@see undefOr()} instead. + */ public static function optional(Validatable $rule): ChainedValidator; public static function perfectSquare(): ChainedValidator; @@ -343,6 +346,8 @@ public static function tld(): ChainedValidator; public static function trueVal(): ChainedValidator; + public static function undefOr(Validatable $rule): ChainedValidator; + public static function unique(): ChainedValidator; public static function uploaded(): ChainedValidator; diff --git a/library/Rules/Optional.php b/library/Rules/UndefOr.php similarity index 75% rename from library/Rules/Optional.php rename to library/Rules/UndefOr.php index 44930795b..1e5a2066f 100644 --- a/library/Rules/Optional.php +++ b/library/Rules/UndefOr.php @@ -15,16 +15,16 @@ use Respect\Validation\Rules\Core\Wrapper; #[Template( - 'The value must be optional', - 'The value must not be optional', + 'The value must be undefined', + 'The value must not be undefined', self::TEMPLATE_STANDARD, )] #[Template( - '{{name}} must be optional', - '{{name}} must not be optional', + '{{name}} must be undefined', + '{{name}} must not be undefined', self::TEMPLATE_NAMED, )] -final class Optional extends Wrapper +final class UndefOr extends Wrapper { use CanValidateUndefined; @@ -33,7 +33,7 @@ final class Optional extends Wrapper public function evaluate(mixed $input): Result { if (!$this->isUndefined($input)) { - return parent::evaluate($input); + return $this->rule->evaluate($input)->withPrefixedId('undefOr'); } if ($this->getName()) { diff --git a/library/Transformers/Aliases.php b/library/Transformers/Aliases.php new file mode 100644 index 000000000..7802a3938 --- /dev/null +++ b/library/Transformers/Aliases.php @@ -0,0 +1,34 @@ + + * SPDX-License-Identifier: MIT + */ + +declare(strict_types=1); + +namespace Respect\Validation\Transformers; + +use function array_keys; +use function in_array; + +final class Aliases implements Transformer +{ + private const ALIASES = [ + 'optional' => 'undefOr', + ]; + + public function __construct( + private readonly Transformer $next + ) { + } + + public function transform(RuleSpec $ruleSpec): RuleSpec + { + if (!in_array($ruleSpec->name, array_keys(self::ALIASES), true)) { + return $this->next->transform($ruleSpec); + } + + return new RuleSpec(self::ALIASES[$ruleSpec->name], $ruleSpec->arguments); + } +} diff --git a/library/Transformers/Prefix.php b/library/Transformers/Prefix.php index 4b1bbf42f..4d7d6ec2d 100644 --- a/library/Transformers/Prefix.php +++ b/library/Transformers/Prefix.php @@ -34,6 +34,7 @@ final class Prefix implements Transformer 'property', 'propertyExists', 'propertyOptional', + 'undefOr', ]; public function transform(RuleSpec $ruleSpec): RuleSpec @@ -79,7 +80,7 @@ public function transform(RuleSpec $ruleSpec): RuleSpec } if (str_starts_with($ruleSpec->name, 'undefOr')) { - return new RuleSpec(substr($ruleSpec->name, 7), $ruleSpec->arguments, new RuleSpec('optional')); + return new RuleSpec(substr($ruleSpec->name, 7), $ruleSpec->arguments, new RuleSpec('undefOr')); } return $ruleSpec; diff --git a/tests/integration/rules/optional.phpt b/tests/integration/rules/optional.phpt deleted file mode 100644 index 55d707d8c..000000000 --- a/tests/integration/rules/optional.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---FILE-- - v::optional(v::alpha())->check(1234)); -exceptionMessage(static fn() => v::optional(v::alpha())->setName('Name')->check(1234)); -exceptionMessage(static fn() => v::not(v::optional(v::alpha()))->check('abcd')); -exceptionMessage(static fn() => v::not(v::optional(v::alpha()))->setName('Name')->check('abcd')); -exceptionFullMessage(static fn() => v::optional(v::alpha())->assert(1234)); -exceptionFullMessage(static fn() => v::optional(v::alpha())->setName('Name')->assert(1234)); -exceptionFullMessage(static fn() => v::not(v::optional(v::alpha()))->assert('abcd')); -exceptionFullMessage(static fn() => v::not(v::optional(v::alpha()))->setName('Name')->assert('abcd')); -?> ---EXPECT-- -1234 must contain only letters (a-z) -Name must contain only letters (a-z) -"abcd" must not contain letters (a-z) -Name must not contain letters (a-z) -- 1234 must contain only letters (a-z) -- Name must contain only letters (a-z) -- "abcd" must not contain letters (a-z) -- Name must not contain letters (a-z) diff --git a/tests/integration/rules/undefOr.phpt b/tests/integration/rules/undefOr.phpt new file mode 100644 index 000000000..79f901d7d --- /dev/null +++ b/tests/integration/rules/undefOr.phpt @@ -0,0 +1,85 @@ +--FILE-- + [v::undefOr(v::alpha()), 1234], + 'Negative wrapper' => [v::not(v::undefOr(v::alpha())), 'alpha'], + 'Negative wrapped' => [v::undefOr(v::not(v::alpha())), 'alpha'], + 'Negative undefined' => [v::not(v::undefOr(v::alpha())), null], + 'Negative undefined, wrapped name' => [v::not(v::undefOr(v::alpha()->setName('Wrapped'))), null], + 'Negative undefined, wrapped name' => [v::not(v::undefOr(v::alpha())->setName('Wrapper')), null], + 'Negative undefined, not name' => [v::not(v::undefOr(v::alpha()))->setName('Not'), null], + 'With template' => [v::undefOr(v::alpha()), 123, 'Underneath the undulating umbrella'], + 'With array template' => [v::undefOr(v::alpha()), 123, ['undefOrAlpha' => 'Undefined number of unique unicorns']], +]); +?> +--EXPECT-- +Default +⎺⎺⎺⎺⎺⎺⎺ +1234 must contain only letters (a-z) +- 1234 must contain only letters (a-z) +[ + 'undefOrAlpha' => '1234 must contain only letters (a-z)', +] + +Negative wrapper +⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺ +"alpha" must not contain letters (a-z) +- "alpha" must not contain letters (a-z) +[ + 'notUndefOrAlpha' => '"alpha" must not contain letters (a-z)', +] + +Negative wrapped +⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺ +"alpha" must not contain letters (a-z) +- "alpha" must not contain letters (a-z) +[ + 'undefOrNotAlpha' => '"alpha" must not contain letters (a-z)', +] + +Negative undefined +⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺ +The value must not be undefined +- The value must not be undefined +[ + 'notUndefOr' => 'The value must not be undefined', +] + +Negative undefined, wrapped name +⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺ +Wrapper must not be undefined +- Wrapper must not be undefined +[ + 'notUndefOr' => 'Wrapper must not be undefined', +] + +Negative undefined, not name +⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺ +Not must not be undefined +- Not must not be undefined +[ + 'notUndefOr' => 'Not must not be undefined', +] + +With template +⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺ +Underneath the undulating umbrella +- Underneath the undulating umbrella +[ + 'undefOrAlpha' => 'Underneath the undulating umbrella', +] + +With array template +⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺ +Undefined number of unique unicorns +- Undefined number of unique unicorns +[ + 'undefOrAlpha' => 'Undefined number of unique unicorns', +] diff --git a/tests/integration/transformers/aliases.phpt b/tests/integration/transformers/aliases.phpt new file mode 100644 index 000000000..7306a2c91 --- /dev/null +++ b/tests/integration/transformers/aliases.phpt @@ -0,0 +1,21 @@ +--FILE-- + [v::optional(v::scalarVal()), []], +]); +?> +--EXPECT-- +optional +⎺⎺⎺⎺⎺⎺⎺⎺ +`[]` must be a scalar value +- `[]` must be a scalar value +[ + 'undefOrScalarVal' => '`[]` must be a scalar value', +] diff --git a/tests/integration/transformers/prefix.phpt b/tests/integration/transformers/prefix.phpt index 1ea73befc..a3a0ddb1d 100644 --- a/tests/integration/transformers/prefix.phpt +++ b/tests/integration/transformers/prefix.phpt @@ -81,5 +81,5 @@ undefOr "string" must be a URL - "string" must be a URL [ - 'url' => '"string" must be a URL', + 'undefOrUrl' => '"string" must be a URL', ] diff --git a/tests/library/Transformers/StubTransformer.php b/tests/library/Transformers/StubTransformer.php new file mode 100644 index 000000000..82019af29 --- /dev/null +++ b/tests/library/Transformers/StubTransformer.php @@ -0,0 +1,21 @@ + + * SPDX-License-Identifier: MIT + */ + +declare(strict_types=1); + +namespace Respect\Validation\Test\Transformers; + +use Respect\Validation\Transformers\RuleSpec; +use Respect\Validation\Transformers\Transformer; + +final class StubTransformer implements Transformer +{ + public function transform(RuleSpec $ruleSpec): RuleSpec + { + return $ruleSpec; + } +} diff --git a/tests/unit/Rules/OptionalTest.php b/tests/unit/Rules/OptionalTest.php deleted file mode 100644 index 098621297..000000000 --- a/tests/unit/Rules/OptionalTest.php +++ /dev/null @@ -1,84 +0,0 @@ - - * SPDX-License-Identifier: MIT - */ - -declare(strict_types=1); - -namespace Respect\Validation\Rules; - -use PHPUnit\Framework\Attributes\CoversClass; -use PHPUnit\Framework\Attributes\Group; -use PHPUnit\Framework\Attributes\Test; -use Respect\Validation\Test\Rules\Stub; -use Respect\Validation\Test\RuleTestCase; -use stdClass; - -#[Group('rule')] -#[CoversClass(Optional::class)] -final class OptionalTest extends RuleTestCase -{ - #[Test] - public function itShouldUseStandardTemplateWhenItHasNameWhenInputIsOptional(): void - { - $rule = new Optional(Stub::pass(1)); - - $result = $rule->evaluate(''); - - self::assertSame($rule, $result->rule); - self::assertSame(Optional::TEMPLATE_STANDARD, $result->template); - } - - #[Test] - public function itShouldUseNamedTemplateWhenItHasNameWhenInputIsOptional(): void - { - $rule = new Optional(Stub::pass(1)); - $rule->setName('foo'); - - $result = $rule->evaluate(''); - - self::assertSame($rule, $result->rule); - self::assertSame(Optional::TEMPLATE_NAMED, $result->template); - } - - #[Test] - public function itShouldUseWrappedRuleToEvaluateWhenNotOptional(): void - { - $input = new stdClass(); - - $wrapped = Stub::pass(2); - $rule = new Optional($wrapped); - - self::assertEquals($wrapped->evaluate($input), $rule->evaluate($input)); - } - - /** @return iterable */ - public static function providerForValidInput(): iterable - { - yield 'null' => [new Optional(Stub::daze()), null]; - yield 'empty string' => [new Optional(Stub::daze()), '']; - yield 'not optional' => [new Optional(Stub::pass(1)), 42]; - } - - /** @return iterable */ - public static function providerForInvalidInput(): iterable - { - yield [new Optional(Stub::fail(1)), 1]; - yield [new Optional(Stub::fail(1)), []]; - yield [new Optional(Stub::fail(1)), ' ']; - yield [new Optional(Stub::fail(1)), 0]; - yield [new Optional(Stub::fail(1)), '0']; - yield [new Optional(Stub::fail(1)), 0]; - yield [new Optional(Stub::fail(1)), '0.0']; - yield [new Optional(Stub::fail(1)), false]; - yield [new Optional(Stub::fail(1)), ['']]; - yield [new Optional(Stub::fail(1)), [' ']]; - yield [new Optional(Stub::fail(1)), [0]]; - yield [new Optional(Stub::fail(1)), ['0']]; - yield [new Optional(Stub::fail(1)), [false]]; - yield [new Optional(Stub::fail(1)), [[''], [0]]]; - yield [new Optional(Stub::fail(1)), new stdClass()]; - } -} diff --git a/tests/unit/Rules/UndefOrTest.php b/tests/unit/Rules/UndefOrTest.php new file mode 100644 index 000000000..0be864708 --- /dev/null +++ b/tests/unit/Rules/UndefOrTest.php @@ -0,0 +1,84 @@ + + * SPDX-License-Identifier: MIT + */ + +declare(strict_types=1); + +namespace Respect\Validation\Rules; + +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use Respect\Validation\Test\Rules\Stub; +use Respect\Validation\Test\RuleTestCase; +use stdClass; + +#[Group('rule')] +#[CoversClass(UndefOr::class)] +final class UndefOrTest extends RuleTestCase +{ + #[Test] + public function itShouldUseStandardTemplateWhenItHasNameWhenInputIsOptional(): void + { + $rule = new UndefOr(Stub::pass(1)); + + $result = $rule->evaluate(''); + + self::assertSame($rule, $result->rule); + self::assertSame(UndefOr::TEMPLATE_STANDARD, $result->template); + } + + #[Test] + public function itShouldUseNamedTemplateWhenItHasNameWhenInputIsOptional(): void + { + $rule = new UndefOr(Stub::pass(1)); + $rule->setName('foo'); + + $result = $rule->evaluate(''); + + self::assertSame($rule, $result->rule); + self::assertSame(UndefOr::TEMPLATE_NAMED, $result->template); + } + + #[Test] + public function itShouldUseWrappedRuleToEvaluateWhenNotOptional(): void + { + $input = new stdClass(); + + $wrapped = Stub::pass(2); + $rule = new UndefOr($wrapped); + + self::assertEquals($wrapped->evaluate($input)->withPrefixedId('undefOr'), $rule->evaluate($input)); + } + + /** @return iterable */ + public static function providerForValidInput(): iterable + { + yield 'null' => [new UndefOr(Stub::daze()), null]; + yield 'empty string' => [new UndefOr(Stub::daze()), '']; + yield 'not optional' => [new UndefOr(Stub::pass(1)), 42]; + } + + /** @return iterable */ + public static function providerForInvalidInput(): iterable + { + yield [new UndefOr(Stub::fail(1)), 1]; + yield [new UndefOr(Stub::fail(1)), []]; + yield [new UndefOr(Stub::fail(1)), ' ']; + yield [new UndefOr(Stub::fail(1)), 0]; + yield [new UndefOr(Stub::fail(1)), '0']; + yield [new UndefOr(Stub::fail(1)), 0]; + yield [new UndefOr(Stub::fail(1)), '0.0']; + yield [new UndefOr(Stub::fail(1)), false]; + yield [new UndefOr(Stub::fail(1)), ['']]; + yield [new UndefOr(Stub::fail(1)), [' ']]; + yield [new UndefOr(Stub::fail(1)), [0]]; + yield [new UndefOr(Stub::fail(1)), ['0']]; + yield [new UndefOr(Stub::fail(1)), [false]]; + yield [new UndefOr(Stub::fail(1)), [[''], [0]]]; + yield [new UndefOr(Stub::fail(1)), new stdClass()]; + } +} diff --git a/tests/unit/Transformers/AliasesTest.php b/tests/unit/Transformers/AliasesTest.php new file mode 100644 index 000000000..5e5d2548b --- /dev/null +++ b/tests/unit/Transformers/AliasesTest.php @@ -0,0 +1,33 @@ + + * SPDX-License-Identifier: MIT + */ + +declare(strict_types=1); + +namespace Respect\Validation\Transformers; + +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; +use Respect\Validation\Test\Rules\Stub; +use Respect\Validation\Test\TestCase; +use Respect\Validation\Test\Transformers\StubTransformer; + +#[CoversClass(Aliases::class)] +final class AliasesTest extends TestCase +{ + #[Test] + public function itShouldConvertOptionalIntoUndefOr(): void + { + $transformer = new Aliases(new StubTransformer()); + + $ruleSpec = new RuleSpec('optional', [Stub::daze()]); + + $actual = $transformer->transform($ruleSpec); + $expected = new RuleSpec('undefOr', $ruleSpec->arguments); + + self::assertEquals($expected, $actual); + } +} diff --git a/tests/unit/Transformers/PrefixTest.php b/tests/unit/Transformers/PrefixTest.php index 247afaf52..8c56486c7 100644 --- a/tests/unit/Transformers/PrefixTest.php +++ b/tests/unit/Transformers/PrefixTest.php @@ -73,7 +73,7 @@ public static function providerForTransformedRuleSpec(): array ], 'undefOr' => [ new RuleSpec('undefOrNextRule', [1, 10]), - new RuleSpec('NextRule', [1, 10], new RuleSpec('optional')), + new RuleSpec('NextRule', [1, 10], new RuleSpec('undefOr')), ], ]; }