Refactor the "NullOr" rule and related classes

This commit will rename the "Nullable" rule to "NullOr" while soft
deprecating the old name. It should work the same as the previous one
but with a different name. It will also prefix the result ID, allowing
more message customization.

While working on it, I realized that the prefix "nullOr" had a typo,
and it was using "nullOf" instead. I fixed that, too.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
This commit is contained in:
Henrique Moody 2024-03-26 01:46:57 +01:00
parent 707dcae65f
commit d7dc0f2b4e
No known key found for this signature in database
GPG key ID: 221E9281655813A6
20 changed files with 536 additions and 420 deletions

View file

@ -25,6 +25,7 @@ use Respect\Validation\Mixins\StaticNot;
use Respect\Validation\Mixins\StaticNullOr;
use Respect\Validation\Mixins\StaticProperty;
use Respect\Validation\Mixins\StaticUndefOr;
use Respect\Validation\Rules\NullOr;
use Respect\Validation\Rules\UndefOr;
use Respect\Validation\Validatable;
@ -71,6 +72,10 @@ function addMethodToInterface(
$method->addComment('@deprecated Use {@see undefOr()} instead.');
}
if ($originalName === 'Nullable') {
$method->addComment('@deprecated Use {@see nullOr()} instead.');
}
foreach ($reflrectionConstructor->getParameters() as $reflectionParameter) {
if ($reflectionParameter->isVariadic()) {
$method->setVariadic();
@ -157,6 +162,8 @@ function overwriteFile(string $content, string $basename): void
'KeyOptional',
'KeySet',
'Optional',
'NullOr',
'Nullable',
'UndefOr',
'Property',
'PropertyExists',
@ -168,10 +175,10 @@ function overwriteFile(string $content, string $basename): void
['Length', 'length', $numberRelatedRules, []],
['Max', 'max', $numberRelatedRules, []],
['Min', 'min', $numberRelatedRules, []],
['Not', 'not', [], ['Not', 'NotEmpty', 'NotBlank', 'NotEmoji', 'NotOptional', 'UndefOr', 'Optional']],
['NullOr', 'nullOf', [], ['Nullable', 'Optional', 'UndefOr']],
['Not', 'not', [], ['Not', 'NotEmpty', 'NotBlank', 'NotEmoji', 'NotOptional', 'NullOr', 'UndefOr', 'Optional']],
['NullOr', 'nullOr', [], ['Nullable', 'NullOr', 'Optional', 'UndefOr']],
['Property', 'property', [], $structureRelatedRules],
['UndefOr', 'undefOr', [], ['Nullable', 'Optional', 'UndefOr']],
['UndefOr', 'undefOr', [], ['Nullable', 'NullOr', 'Optional', 'UndefOr']],
['Validator', null, [], []],
];
@ -190,6 +197,9 @@ function overwriteFile(string $content, string $basename): void
if ($className === UndefOr::class) {
$names['Optional'] = $reflection;
}
if ($className === NullOr::class) {
$names['Nullable'] = $reflection;
}
}
ksort($names);

View file

@ -257,8 +257,6 @@ interface ChainedKey
public function keyNullType(int|string $key): ChainedValidator;
public function keyNullable(int|string $key, Validatable $rule): ChainedValidator;
public function keyNumber(int|string $key): ChainedValidator;
public function keyNumericVal(int|string $key): ChainedValidator;

View file

@ -236,8 +236,6 @@ interface ChainedNot
public function notNullType(): ChainedValidator;
public function notNullable(Validatable $rule): ChainedValidator;
public function notNumber(): ChainedValidator;
public function notNumericVal(): ChainedValidator;

View file

@ -13,341 +13,341 @@ use Respect\Validation\Validatable;
interface ChainedNullOr
{
public function nullOfAllOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator;
public function nullOrAllOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator;
public function nullOfAlnum(string ...$additionalChars): ChainedValidator;
public function nullOrAlnum(string ...$additionalChars): ChainedValidator;
public function nullOfAlpha(string ...$additionalChars): ChainedValidator;
public function nullOrAlpha(string ...$additionalChars): ChainedValidator;
public function nullOfAlwaysInvalid(): ChainedValidator;
public function nullOrAlwaysInvalid(): ChainedValidator;
public function nullOfAlwaysValid(): ChainedValidator;
public function nullOrAlwaysValid(): ChainedValidator;
public function nullOfAnyOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator;
public function nullOrAnyOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator;
public function nullOfArrayType(): ChainedValidator;
public function nullOrArrayType(): ChainedValidator;
public function nullOfArrayVal(): ChainedValidator;
public function nullOrArrayVal(): ChainedValidator;
public function nullOfBase(
public function nullOrBase(
int $base,
string $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
): ChainedValidator;
public function nullOfBase64(): ChainedValidator;
public function nullOrBase64(): ChainedValidator;
public function nullOfBetween(mixed $minValue, mixed $maxValue): ChainedValidator;
public function nullOrBetween(mixed $minValue, mixed $maxValue): ChainedValidator;
public function nullOfBetweenExclusive(mixed $minimum, mixed $maximum): ChainedValidator;
public function nullOrBetweenExclusive(mixed $minimum, mixed $maximum): ChainedValidator;
public function nullOfBoolType(): ChainedValidator;
public function nullOrBoolType(): ChainedValidator;
public function nullOfBoolVal(): ChainedValidator;
public function nullOrBoolVal(): ChainedValidator;
public function nullOfBsn(): ChainedValidator;
public function nullOrBsn(): ChainedValidator;
public function nullOfCall(callable $callable, Validatable $rule): ChainedValidator;
public function nullOrCall(callable $callable, Validatable $rule): ChainedValidator;
public function nullOfCallableType(): ChainedValidator;
public function nullOrCallableType(): ChainedValidator;
public function nullOfCallback(callable $callback, mixed ...$arguments): ChainedValidator;
public function nullOrCallback(callable $callback, mixed ...$arguments): ChainedValidator;
public function nullOfCharset(string $charset, string ...$charsets): ChainedValidator;
public function nullOrCharset(string $charset, string ...$charsets): ChainedValidator;
public function nullOfCnh(): ChainedValidator;
public function nullOrCnh(): ChainedValidator;
public function nullOfCnpj(): ChainedValidator;
public function nullOrCnpj(): ChainedValidator;
public function nullOfConsecutive(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator;
public function nullOrConsecutive(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator;
public function nullOfConsonant(string ...$additionalChars): ChainedValidator;
public function nullOrConsonant(string ...$additionalChars): ChainedValidator;
public function nullOfContains(mixed $containsValue, bool $identical = false): ChainedValidator;
public function nullOrContains(mixed $containsValue, bool $identical = false): ChainedValidator;
/**
* @param non-empty-array<mixed> $needles
*/
public function nullOfContainsAny(array $needles, bool $identical = false): ChainedValidator;
public function nullOrContainsAny(array $needles, bool $identical = false): ChainedValidator;
public function nullOfControl(string ...$additionalChars): ChainedValidator;
public function nullOrControl(string ...$additionalChars): ChainedValidator;
public function nullOfCountable(): ChainedValidator;
public function nullOrCountable(): ChainedValidator;
/**
* @param "alpha-2"|"alpha-3"|"numeric" $set
*/
public function nullOfCountryCode(string $set = 'alpha-2'): ChainedValidator;
public function nullOrCountryCode(string $set = 'alpha-2'): ChainedValidator;
public function nullOfCpf(): ChainedValidator;
public function nullOrCpf(): ChainedValidator;
public function nullOfCreditCard(string $brand = 'Any'): ChainedValidator;
public function nullOrCreditCard(string $brand = 'Any'): ChainedValidator;
/**
* @param "alpha-3"|"numeric" $set
*/
public function nullOfCurrencyCode(string $set = 'alpha-3'): ChainedValidator;
public function nullOrCurrencyCode(string $set = 'alpha-3'): ChainedValidator;
public function nullOfDate(string $format = 'Y-m-d'): ChainedValidator;
public function nullOrDate(string $format = 'Y-m-d'): ChainedValidator;
public function nullOfDateTime(?string $format = null): ChainedValidator;
public function nullOrDateTime(?string $format = null): ChainedValidator;
public function nullOfDecimal(int $decimals): ChainedValidator;
public function nullOrDecimal(int $decimals): ChainedValidator;
public function nullOfDigit(string ...$additionalChars): ChainedValidator;
public function nullOrDigit(string ...$additionalChars): ChainedValidator;
public function nullOfDirectory(): ChainedValidator;
public function nullOrDirectory(): ChainedValidator;
public function nullOfDomain(bool $tldCheck = true): ChainedValidator;
public function nullOrDomain(bool $tldCheck = true): ChainedValidator;
public function nullOfEach(Validatable $rule): ChainedValidator;
public function nullOrEach(Validatable $rule): ChainedValidator;
public function nullOfEmail(): ChainedValidator;
public function nullOrEmail(): ChainedValidator;
public function nullOfEndsWith(mixed $endValue, bool $identical = false): ChainedValidator;
public function nullOrEndsWith(mixed $endValue, bool $identical = false): ChainedValidator;
public function nullOfEquals(mixed $compareTo): ChainedValidator;
public function nullOrEquals(mixed $compareTo): ChainedValidator;
public function nullOfEquivalent(mixed $compareTo): ChainedValidator;
public function nullOrEquivalent(mixed $compareTo): ChainedValidator;
public function nullOfEven(): ChainedValidator;
public function nullOrEven(): ChainedValidator;
public function nullOfExecutable(): ChainedValidator;
public function nullOrExecutable(): ChainedValidator;
public function nullOfExists(): ChainedValidator;
public function nullOrExists(): ChainedValidator;
public function nullOfExtension(string $extension): ChainedValidator;
public function nullOrExtension(string $extension): ChainedValidator;
public function nullOfFactor(int $dividend): ChainedValidator;
public function nullOrFactor(int $dividend): ChainedValidator;
public function nullOfFalseVal(): ChainedValidator;
public function nullOrFalseVal(): ChainedValidator;
public function nullOfFibonacci(): ChainedValidator;
public function nullOrFibonacci(): ChainedValidator;
public function nullOfFile(): ChainedValidator;
public function nullOrFile(): ChainedValidator;
public function nullOfFilterVar(int $filter, mixed $options = null): ChainedValidator;
public function nullOrFilterVar(int $filter, mixed $options = null): ChainedValidator;
public function nullOfFinite(): ChainedValidator;
public function nullOrFinite(): ChainedValidator;
public function nullOfFloatType(): ChainedValidator;
public function nullOrFloatType(): ChainedValidator;
public function nullOfFloatVal(): ChainedValidator;
public function nullOrFloatVal(): ChainedValidator;
public function nullOfGraph(string ...$additionalChars): ChainedValidator;
public function nullOrGraph(string ...$additionalChars): ChainedValidator;
public function nullOfGreaterThan(mixed $compareTo): ChainedValidator;
public function nullOrGreaterThan(mixed $compareTo): ChainedValidator;
public function nullOfGreaterThanOrEqual(mixed $compareTo): ChainedValidator;
public function nullOrGreaterThanOrEqual(mixed $compareTo): ChainedValidator;
public function nullOfHetu(): ChainedValidator;
public function nullOrHetu(): ChainedValidator;
public function nullOfHexRgbColor(): ChainedValidator;
public function nullOrHexRgbColor(): ChainedValidator;
public function nullOfIban(): ChainedValidator;
public function nullOrIban(): ChainedValidator;
public function nullOfIdentical(mixed $compareTo): ChainedValidator;
public function nullOrIdentical(mixed $compareTo): ChainedValidator;
public function nullOfImage(): ChainedValidator;
public function nullOrImage(): ChainedValidator;
public function nullOfImei(): ChainedValidator;
public function nullOrImei(): ChainedValidator;
public function nullOfIn(mixed $haystack, bool $compareIdentical = false): ChainedValidator;
public function nullOrIn(mixed $haystack, bool $compareIdentical = false): ChainedValidator;
public function nullOfInfinite(): ChainedValidator;
public function nullOrInfinite(): ChainedValidator;
/**
* @param class-string $class
*/
public function nullOfInstance(string $class): ChainedValidator;
public function nullOrInstance(string $class): ChainedValidator;
public function nullOfIntType(): ChainedValidator;
public function nullOrIntType(): ChainedValidator;
public function nullOfIntVal(): ChainedValidator;
public function nullOrIntVal(): ChainedValidator;
public function nullOfIp(string $range = '*', ?int $options = null): ChainedValidator;
public function nullOrIp(string $range = '*', ?int $options = null): ChainedValidator;
public function nullOfIsbn(): ChainedValidator;
public function nullOrIsbn(): ChainedValidator;
public function nullOfIterableType(): ChainedValidator;
public function nullOrIterableType(): ChainedValidator;
public function nullOfIterableVal(): ChainedValidator;
public function nullOrIterableVal(): ChainedValidator;
public function nullOfJson(): ChainedValidator;
public function nullOrJson(): ChainedValidator;
public function nullOfKey(string|int $key, Validatable $rule): ChainedValidator;
public function nullOrKey(string|int $key, Validatable $rule): ChainedValidator;
public function nullOfKeyExists(string|int $key): ChainedValidator;
public function nullOrKeyExists(string|int $key): ChainedValidator;
public function nullOfKeyOptional(string|int $key, Validatable $rule): ChainedValidator;
public function nullOrKeyOptional(string|int $key, Validatable $rule): ChainedValidator;
public function nullOfKeySet(Validatable $rule, Validatable ...$rules): ChainedValidator;
public function nullOrKeySet(Validatable $rule, Validatable ...$rules): ChainedValidator;
/**
* @param "alpha-2"|"alpha-3" $set
*/
public function nullOfLanguageCode(string $set = 'alpha-2'): ChainedValidator;
public function nullOrLanguageCode(string $set = 'alpha-2'): ChainedValidator;
/**
* @param callable(mixed): Validatable $ruleCreator
*/
public function nullOfLazy(callable $ruleCreator): ChainedValidator;
public function nullOrLazy(callable $ruleCreator): ChainedValidator;
public function nullOfLeapDate(string $format): ChainedValidator;
public function nullOrLeapDate(string $format): ChainedValidator;
public function nullOfLeapYear(): ChainedValidator;
public function nullOrLeapYear(): ChainedValidator;
public function nullOfLength(Validatable $rule): ChainedValidator;
public function nullOrLength(Validatable $rule): ChainedValidator;
public function nullOfLessThan(mixed $compareTo): ChainedValidator;
public function nullOrLessThan(mixed $compareTo): ChainedValidator;
public function nullOfLessThanOrEqual(mixed $compareTo): ChainedValidator;
public function nullOrLessThanOrEqual(mixed $compareTo): ChainedValidator;
public function nullOfLowercase(): ChainedValidator;
public function nullOrLowercase(): ChainedValidator;
public function nullOfLuhn(): ChainedValidator;
public function nullOrLuhn(): ChainedValidator;
public function nullOfMacAddress(): ChainedValidator;
public function nullOrMacAddress(): ChainedValidator;
public function nullOfMax(Validatable $rule): ChainedValidator;
public function nullOrMax(Validatable $rule): ChainedValidator;
public function nullOfMaxAge(int $age, ?string $format = null): ChainedValidator;
public function nullOrMaxAge(int $age, ?string $format = null): ChainedValidator;
public function nullOfMimetype(string $mimetype): ChainedValidator;
public function nullOrMimetype(string $mimetype): ChainedValidator;
public function nullOfMin(Validatable $rule): ChainedValidator;
public function nullOrMin(Validatable $rule): ChainedValidator;
public function nullOfMinAge(int $age, ?string $format = null): ChainedValidator;
public function nullOrMinAge(int $age, ?string $format = null): ChainedValidator;
public function nullOfMultiple(int $multipleOf): ChainedValidator;
public function nullOrMultiple(int $multipleOf): ChainedValidator;
public function nullOfNegative(): ChainedValidator;
public function nullOrNegative(): ChainedValidator;
public function nullOfNfeAccessKey(): ChainedValidator;
public function nullOrNfeAccessKey(): ChainedValidator;
public function nullOfNif(): ChainedValidator;
public function nullOrNif(): ChainedValidator;
public function nullOfNip(): ChainedValidator;
public function nullOrNip(): ChainedValidator;
public function nullOfNo(bool $useLocale = false): ChainedValidator;
public function nullOrNo(bool $useLocale = false): ChainedValidator;
public function nullOfNoWhitespace(): ChainedValidator;
public function nullOrNoWhitespace(): ChainedValidator;
public function nullOfNoneOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator;
public function nullOrNoneOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator;
public function nullOfNot(Validatable $rule): ChainedValidator;
public function nullOrNot(Validatable $rule): ChainedValidator;
public function nullOfNotBlank(): ChainedValidator;
public function nullOrNotBlank(): ChainedValidator;
public function nullOfNotEmoji(): ChainedValidator;
public function nullOrNotEmoji(): ChainedValidator;
public function nullOfNotEmpty(): ChainedValidator;
public function nullOrNotEmpty(): ChainedValidator;
public function nullOfNotOptional(): ChainedValidator;
public function nullOrNotOptional(): ChainedValidator;
public function nullOfNullType(): ChainedValidator;
public function nullOrNullType(): ChainedValidator;
public function nullOfNumber(): ChainedValidator;
public function nullOrNumber(): ChainedValidator;
public function nullOfNumericVal(): ChainedValidator;
public function nullOrNumericVal(): ChainedValidator;
public function nullOfObjectType(): ChainedValidator;
public function nullOrObjectType(): ChainedValidator;
public function nullOfOdd(): ChainedValidator;
public function nullOrOdd(): ChainedValidator;
public function nullOfOneOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator;
public function nullOrOneOf(Validatable $rule1, Validatable $rule2, Validatable ...$rules): ChainedValidator;
public function nullOfPerfectSquare(): ChainedValidator;
public function nullOrPerfectSquare(): ChainedValidator;
public function nullOfPesel(): ChainedValidator;
public function nullOrPesel(): ChainedValidator;
public function nullOfPhone(?string $countryCode = null): ChainedValidator;
public function nullOrPhone(?string $countryCode = null): ChainedValidator;
public function nullOfPhpLabel(): ChainedValidator;
public function nullOrPhpLabel(): ChainedValidator;
public function nullOfPis(): ChainedValidator;
public function nullOrPis(): ChainedValidator;
public function nullOfPolishIdCard(): ChainedValidator;
public function nullOrPolishIdCard(): ChainedValidator;
public function nullOfPortugueseNif(): ChainedValidator;
public function nullOrPortugueseNif(): ChainedValidator;
public function nullOfPositive(): ChainedValidator;
public function nullOrPositive(): ChainedValidator;
public function nullOfPostalCode(string $countryCode, bool $formatted = false): ChainedValidator;
public function nullOrPostalCode(string $countryCode, bool $formatted = false): ChainedValidator;
public function nullOfPrimeNumber(): ChainedValidator;
public function nullOrPrimeNumber(): ChainedValidator;
public function nullOfPrintable(string ...$additionalChars): ChainedValidator;
public function nullOrPrintable(string ...$additionalChars): ChainedValidator;
public function nullOfProperty(string $propertyName, Validatable $rule): ChainedValidator;
public function nullOrProperty(string $propertyName, Validatable $rule): ChainedValidator;
public function nullOfPropertyExists(string $propertyName): ChainedValidator;
public function nullOrPropertyExists(string $propertyName): ChainedValidator;
public function nullOfPropertyOptional(string $propertyName, Validatable $rule): ChainedValidator;
public function nullOrPropertyOptional(string $propertyName, Validatable $rule): ChainedValidator;
public function nullOfPublicDomainSuffix(): ChainedValidator;
public function nullOrPublicDomainSuffix(): ChainedValidator;
public function nullOfPunct(string ...$additionalChars): ChainedValidator;
public function nullOrPunct(string ...$additionalChars): ChainedValidator;
public function nullOfReadable(): ChainedValidator;
public function nullOrReadable(): ChainedValidator;
public function nullOfRegex(string $regex): ChainedValidator;
public function nullOrRegex(string $regex): ChainedValidator;
public function nullOfResourceType(): ChainedValidator;
public function nullOrResourceType(): ChainedValidator;
public function nullOfRoman(): ChainedValidator;
public function nullOrRoman(): ChainedValidator;
public function nullOfScalarVal(): ChainedValidator;
public function nullOrScalarVal(): ChainedValidator;
public function nullOfSize(string|int|null $minSize = null, string|int|null $maxSize = null): ChainedValidator;
public function nullOrSize(string|int|null $minSize = null, string|int|null $maxSize = null): ChainedValidator;
public function nullOfSlug(): ChainedValidator;
public function nullOrSlug(): ChainedValidator;
public function nullOfSorted(string $direction): ChainedValidator;
public function nullOrSorted(string $direction): ChainedValidator;
public function nullOfSpace(string ...$additionalChars): ChainedValidator;
public function nullOrSpace(string ...$additionalChars): ChainedValidator;
public function nullOfStartsWith(mixed $startValue, bool $identical = false): ChainedValidator;
public function nullOrStartsWith(mixed $startValue, bool $identical = false): ChainedValidator;
public function nullOfStringType(): ChainedValidator;
public function nullOrStringType(): ChainedValidator;
public function nullOfStringVal(): ChainedValidator;
public function nullOrStringVal(): ChainedValidator;
public function nullOfSubdivisionCode(string $countryCode): ChainedValidator;
public function nullOrSubdivisionCode(string $countryCode): ChainedValidator;
/**
* @param mixed[] $superset
*/
public function nullOfSubset(array $superset): ChainedValidator;
public function nullOrSubset(array $superset): ChainedValidator;
public function nullOfSymbolicLink(): ChainedValidator;
public function nullOrSymbolicLink(): ChainedValidator;
public function nullOfTime(string $format = 'H:i:s'): ChainedValidator;
public function nullOrTime(string $format = 'H:i:s'): ChainedValidator;
public function nullOfTld(): ChainedValidator;
public function nullOrTld(): ChainedValidator;
public function nullOfTrueVal(): ChainedValidator;
public function nullOrTrueVal(): ChainedValidator;
public function nullOfUnique(): ChainedValidator;
public function nullOrUnique(): ChainedValidator;
public function nullOfUploaded(): ChainedValidator;
public function nullOrUploaded(): ChainedValidator;
public function nullOfUppercase(): ChainedValidator;
public function nullOrUppercase(): ChainedValidator;
public function nullOfUrl(): ChainedValidator;
public function nullOrUrl(): ChainedValidator;
public function nullOfUuid(?int $version = null): ChainedValidator;
public function nullOrUuid(?int $version = null): ChainedValidator;
public function nullOfVersion(): ChainedValidator;
public function nullOrVersion(): ChainedValidator;
public function nullOfVideoUrl(?string $service = null): ChainedValidator;
public function nullOrVideoUrl(?string $service = null): ChainedValidator;
public function nullOfVowel(string ...$additionalChars): ChainedValidator;
public function nullOrVowel(string ...$additionalChars): ChainedValidator;
public function nullOfWhen(Validatable $when, Validatable $then, ?Validatable $else = null): ChainedValidator;
public function nullOrWhen(Validatable $when, Validatable $then, ?Validatable $else = null): ChainedValidator;
public function nullOfWritable(): ChainedValidator;
public function nullOrWritable(): ChainedValidator;
public function nullOfXdigit(string ...$additionalChars): ChainedValidator;
public function nullOrXdigit(string ...$additionalChars): ChainedValidator;
public function nullOfYes(bool $useLocale = false): ChainedValidator;
public function nullOrYes(bool $useLocale = false): ChainedValidator;
}

View file

@ -269,8 +269,6 @@ interface ChainedProperty
public function propertyNullType(string $propertyName): ChainedValidator;
public function propertyNullable(string $propertyName, Validatable $rule): ChainedValidator;
public function propertyNumber(string $propertyName): ChainedValidator;
public function propertyNumericVal(string $propertyName): ChainedValidator;

View file

@ -253,8 +253,13 @@ interface ChainedValidator extends
public function notOptional(): ChainedValidator;
public function nullOr(Validatable $rule): ChainedValidator;
public function nullType(): ChainedValidator;
/**
* @deprecated Use {@see nullOr()} instead.
*/
public function nullable(Validatable $rule): ChainedValidator;
public function number(): ChainedValidator;

View file

@ -261,8 +261,6 @@ interface StaticKey
public static function keyNullType(int|string $key): ChainedValidator;
public static function keyNullable(int|string $key, Validatable $rule): ChainedValidator;
public static function keyNumber(int|string $key): ChainedValidator;
public static function keyNumericVal(int|string $key): ChainedValidator;

View file

@ -240,8 +240,6 @@ interface StaticNot
public static function notNullType(): ChainedValidator;
public static function notNullable(Validatable $rule): ChainedValidator;
public static function notNumber(): ChainedValidator;
public static function notNumericVal(): ChainedValidator;

View file

@ -13,368 +13,368 @@ use Respect\Validation\Validatable;
interface StaticNullOr
{
public static function nullOfAllOf(
public static function nullOrAllOf(
Validatable $rule1,
Validatable $rule2,
Validatable ...$rules,
): ChainedValidator;
public static function nullOfAlnum(string ...$additionalChars): ChainedValidator;
public static function nullOrAlnum(string ...$additionalChars): ChainedValidator;
public static function nullOfAlpha(string ...$additionalChars): ChainedValidator;
public static function nullOrAlpha(string ...$additionalChars): ChainedValidator;
public static function nullOfAlwaysInvalid(): ChainedValidator;
public static function nullOrAlwaysInvalid(): ChainedValidator;
public static function nullOfAlwaysValid(): ChainedValidator;
public static function nullOrAlwaysValid(): ChainedValidator;
public static function nullOfAnyOf(
public static function nullOrAnyOf(
Validatable $rule1,
Validatable $rule2,
Validatable ...$rules,
): ChainedValidator;
public static function nullOfArrayType(): ChainedValidator;
public static function nullOrArrayType(): ChainedValidator;
public static function nullOfArrayVal(): ChainedValidator;
public static function nullOrArrayVal(): ChainedValidator;
public static function nullOfBase(
public static function nullOrBase(
int $base,
string $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
): ChainedValidator;
public static function nullOfBase64(): ChainedValidator;
public static function nullOrBase64(): ChainedValidator;
public static function nullOfBetween(mixed $minValue, mixed $maxValue): ChainedValidator;
public static function nullOrBetween(mixed $minValue, mixed $maxValue): ChainedValidator;
public static function nullOfBetweenExclusive(mixed $minimum, mixed $maximum): ChainedValidator;
public static function nullOrBetweenExclusive(mixed $minimum, mixed $maximum): ChainedValidator;
public static function nullOfBoolType(): ChainedValidator;
public static function nullOrBoolType(): ChainedValidator;
public static function nullOfBoolVal(): ChainedValidator;
public static function nullOrBoolVal(): ChainedValidator;
public static function nullOfBsn(): ChainedValidator;
public static function nullOrBsn(): ChainedValidator;
public static function nullOfCall(callable $callable, Validatable $rule): ChainedValidator;
public static function nullOrCall(callable $callable, Validatable $rule): ChainedValidator;
public static function nullOfCallableType(): ChainedValidator;
public static function nullOrCallableType(): ChainedValidator;
public static function nullOfCallback(callable $callback, mixed ...$arguments): ChainedValidator;
public static function nullOrCallback(callable $callback, mixed ...$arguments): ChainedValidator;
public static function nullOfCharset(string $charset, string ...$charsets): ChainedValidator;
public static function nullOrCharset(string $charset, string ...$charsets): ChainedValidator;
public static function nullOfCnh(): ChainedValidator;
public static function nullOrCnh(): ChainedValidator;
public static function nullOfCnpj(): ChainedValidator;
public static function nullOrCnpj(): ChainedValidator;
public static function nullOfConsecutive(
public static function nullOrConsecutive(
Validatable $rule1,
Validatable $rule2,
Validatable ...$rules,
): ChainedValidator;
public static function nullOfConsonant(string ...$additionalChars): ChainedValidator;
public static function nullOrConsonant(string ...$additionalChars): ChainedValidator;
public static function nullOfContains(mixed $containsValue, bool $identical = false): ChainedValidator;
public static function nullOrContains(mixed $containsValue, bool $identical = false): ChainedValidator;
/**
* @param non-empty-array<mixed> $needles
*/
public static function nullOfContainsAny(array $needles, bool $identical = false): ChainedValidator;
public static function nullOrContainsAny(array $needles, bool $identical = false): ChainedValidator;
public static function nullOfControl(string ...$additionalChars): ChainedValidator;
public static function nullOrControl(string ...$additionalChars): ChainedValidator;
public static function nullOfCountable(): ChainedValidator;
public static function nullOrCountable(): ChainedValidator;
/**
* @param "alpha-2"|"alpha-3"|"numeric" $set
*/
public static function nullOfCountryCode(string $set = 'alpha-2'): ChainedValidator;
public static function nullOrCountryCode(string $set = 'alpha-2'): ChainedValidator;
public static function nullOfCpf(): ChainedValidator;
public static function nullOrCpf(): ChainedValidator;
public static function nullOfCreditCard(string $brand = 'Any'): ChainedValidator;
public static function nullOrCreditCard(string $brand = 'Any'): ChainedValidator;
/**
* @param "alpha-3"|"numeric" $set
*/
public static function nullOfCurrencyCode(string $set = 'alpha-3'): ChainedValidator;
public static function nullOrCurrencyCode(string $set = 'alpha-3'): ChainedValidator;
public static function nullOfDate(string $format = 'Y-m-d'): ChainedValidator;
public static function nullOrDate(string $format = 'Y-m-d'): ChainedValidator;
public static function nullOfDateTime(?string $format = null): ChainedValidator;
public static function nullOrDateTime(?string $format = null): ChainedValidator;
public static function nullOfDecimal(int $decimals): ChainedValidator;
public static function nullOrDecimal(int $decimals): ChainedValidator;
public static function nullOfDigit(string ...$additionalChars): ChainedValidator;
public static function nullOrDigit(string ...$additionalChars): ChainedValidator;
public static function nullOfDirectory(): ChainedValidator;
public static function nullOrDirectory(): ChainedValidator;
public static function nullOfDomain(bool $tldCheck = true): ChainedValidator;
public static function nullOrDomain(bool $tldCheck = true): ChainedValidator;
public static function nullOfEach(Validatable $rule): ChainedValidator;
public static function nullOrEach(Validatable $rule): ChainedValidator;
public static function nullOfEmail(): ChainedValidator;
public static function nullOrEmail(): ChainedValidator;
public static function nullOfEndsWith(mixed $endValue, bool $identical = false): ChainedValidator;
public static function nullOrEndsWith(mixed $endValue, bool $identical = false): ChainedValidator;
public static function nullOfEquals(mixed $compareTo): ChainedValidator;
public static function nullOrEquals(mixed $compareTo): ChainedValidator;
public static function nullOfEquivalent(mixed $compareTo): ChainedValidator;
public static function nullOrEquivalent(mixed $compareTo): ChainedValidator;
public static function nullOfEven(): ChainedValidator;
public static function nullOrEven(): ChainedValidator;
public static function nullOfExecutable(): ChainedValidator;
public static function nullOrExecutable(): ChainedValidator;
public static function nullOfExists(): ChainedValidator;
public static function nullOrExists(): ChainedValidator;
public static function nullOfExtension(string $extension): ChainedValidator;
public static function nullOrExtension(string $extension): ChainedValidator;
public static function nullOfFactor(int $dividend): ChainedValidator;
public static function nullOrFactor(int $dividend): ChainedValidator;
public static function nullOfFalseVal(): ChainedValidator;
public static function nullOrFalseVal(): ChainedValidator;
public static function nullOfFibonacci(): ChainedValidator;
public static function nullOrFibonacci(): ChainedValidator;
public static function nullOfFile(): ChainedValidator;
public static function nullOrFile(): ChainedValidator;
public static function nullOfFilterVar(int $filter, mixed $options = null): ChainedValidator;
public static function nullOrFilterVar(int $filter, mixed $options = null): ChainedValidator;
public static function nullOfFinite(): ChainedValidator;
public static function nullOrFinite(): ChainedValidator;
public static function nullOfFloatType(): ChainedValidator;
public static function nullOrFloatType(): ChainedValidator;
public static function nullOfFloatVal(): ChainedValidator;
public static function nullOrFloatVal(): ChainedValidator;
public static function nullOfGraph(string ...$additionalChars): ChainedValidator;
public static function nullOrGraph(string ...$additionalChars): ChainedValidator;
public static function nullOfGreaterThan(mixed $compareTo): ChainedValidator;
public static function nullOrGreaterThan(mixed $compareTo): ChainedValidator;
public static function nullOfGreaterThanOrEqual(mixed $compareTo): ChainedValidator;
public static function nullOrGreaterThanOrEqual(mixed $compareTo): ChainedValidator;
public static function nullOfHetu(): ChainedValidator;
public static function nullOrHetu(): ChainedValidator;
public static function nullOfHexRgbColor(): ChainedValidator;
public static function nullOrHexRgbColor(): ChainedValidator;
public static function nullOfIban(): ChainedValidator;
public static function nullOrIban(): ChainedValidator;
public static function nullOfIdentical(mixed $compareTo): ChainedValidator;
public static function nullOrIdentical(mixed $compareTo): ChainedValidator;
public static function nullOfImage(): ChainedValidator;
public static function nullOrImage(): ChainedValidator;
public static function nullOfImei(): ChainedValidator;
public static function nullOrImei(): ChainedValidator;
public static function nullOfIn(mixed $haystack, bool $compareIdentical = false): ChainedValidator;
public static function nullOrIn(mixed $haystack, bool $compareIdentical = false): ChainedValidator;
public static function nullOfInfinite(): ChainedValidator;
public static function nullOrInfinite(): ChainedValidator;
/**
* @param class-string $class
*/
public static function nullOfInstance(string $class): ChainedValidator;
public static function nullOrInstance(string $class): ChainedValidator;
public static function nullOfIntType(): ChainedValidator;
public static function nullOrIntType(): ChainedValidator;
public static function nullOfIntVal(): ChainedValidator;
public static function nullOrIntVal(): ChainedValidator;
public static function nullOfIp(string $range = '*', ?int $options = null): ChainedValidator;
public static function nullOrIp(string $range = '*', ?int $options = null): ChainedValidator;
public static function nullOfIsbn(): ChainedValidator;
public static function nullOrIsbn(): ChainedValidator;
public static function nullOfIterableType(): ChainedValidator;
public static function nullOrIterableType(): ChainedValidator;
public static function nullOfIterableVal(): ChainedValidator;
public static function nullOrIterableVal(): ChainedValidator;
public static function nullOfJson(): ChainedValidator;
public static function nullOrJson(): ChainedValidator;
public static function nullOfKey(string|int $key, Validatable $rule): ChainedValidator;
public static function nullOrKey(string|int $key, Validatable $rule): ChainedValidator;
public static function nullOfKeyExists(string|int $key): ChainedValidator;
public static function nullOrKeyExists(string|int $key): ChainedValidator;
public static function nullOfKeyOptional(string|int $key, Validatable $rule): ChainedValidator;
public static function nullOrKeyOptional(string|int $key, Validatable $rule): ChainedValidator;
public static function nullOfKeySet(Validatable $rule, Validatable ...$rules): ChainedValidator;
public static function nullOrKeySet(Validatable $rule, Validatable ...$rules): ChainedValidator;
/**
* @param "alpha-2"|"alpha-3" $set
*/
public static function nullOfLanguageCode(string $set = 'alpha-2'): ChainedValidator;
public static function nullOrLanguageCode(string $set = 'alpha-2'): ChainedValidator;
/**
* @param callable(mixed): Validatable $ruleCreator
*/
public static function nullOfLazy(callable $ruleCreator): ChainedValidator;
public static function nullOrLazy(callable $ruleCreator): ChainedValidator;
public static function nullOfLeapDate(string $format): ChainedValidator;
public static function nullOrLeapDate(string $format): ChainedValidator;
public static function nullOfLeapYear(): ChainedValidator;
public static function nullOrLeapYear(): ChainedValidator;
public static function nullOfLength(Validatable $rule): ChainedValidator;
public static function nullOrLength(Validatable $rule): ChainedValidator;
public static function nullOfLessThan(mixed $compareTo): ChainedValidator;
public static function nullOrLessThan(mixed $compareTo): ChainedValidator;
public static function nullOfLessThanOrEqual(mixed $compareTo): ChainedValidator;
public static function nullOrLessThanOrEqual(mixed $compareTo): ChainedValidator;
public static function nullOfLowercase(): ChainedValidator;
public static function nullOrLowercase(): ChainedValidator;
public static function nullOfLuhn(): ChainedValidator;
public static function nullOrLuhn(): ChainedValidator;
public static function nullOfMacAddress(): ChainedValidator;
public static function nullOrMacAddress(): ChainedValidator;
public static function nullOfMax(Validatable $rule): ChainedValidator;
public static function nullOrMax(Validatable $rule): ChainedValidator;
public static function nullOfMaxAge(int $age, ?string $format = null): ChainedValidator;
public static function nullOrMaxAge(int $age, ?string $format = null): ChainedValidator;
public static function nullOfMimetype(string $mimetype): ChainedValidator;
public static function nullOrMimetype(string $mimetype): ChainedValidator;
public static function nullOfMin(Validatable $rule): ChainedValidator;
public static function nullOrMin(Validatable $rule): ChainedValidator;
public static function nullOfMinAge(int $age, ?string $format = null): ChainedValidator;
public static function nullOrMinAge(int $age, ?string $format = null): ChainedValidator;
public static function nullOfMultiple(int $multipleOf): ChainedValidator;
public static function nullOrMultiple(int $multipleOf): ChainedValidator;
public static function nullOfNegative(): ChainedValidator;
public static function nullOrNegative(): ChainedValidator;
public static function nullOfNfeAccessKey(): ChainedValidator;
public static function nullOrNfeAccessKey(): ChainedValidator;
public static function nullOfNif(): ChainedValidator;
public static function nullOrNif(): ChainedValidator;
public static function nullOfNip(): ChainedValidator;
public static function nullOrNip(): ChainedValidator;
public static function nullOfNo(bool $useLocale = false): ChainedValidator;
public static function nullOrNo(bool $useLocale = false): ChainedValidator;
public static function nullOfNoWhitespace(): ChainedValidator;
public static function nullOrNoWhitespace(): ChainedValidator;
public static function nullOfNoneOf(
public static function nullOrNoneOf(
Validatable $rule1,
Validatable $rule2,
Validatable ...$rules,
): ChainedValidator;
public static function nullOfNot(Validatable $rule): ChainedValidator;
public static function nullOrNot(Validatable $rule): ChainedValidator;
public static function nullOfNotBlank(): ChainedValidator;
public static function nullOrNotBlank(): ChainedValidator;
public static function nullOfNotEmoji(): ChainedValidator;
public static function nullOrNotEmoji(): ChainedValidator;
public static function nullOfNotEmpty(): ChainedValidator;
public static function nullOrNotEmpty(): ChainedValidator;
public static function nullOfNotOptional(): ChainedValidator;
public static function nullOrNotOptional(): ChainedValidator;
public static function nullOfNullType(): ChainedValidator;
public static function nullOrNullType(): ChainedValidator;
public static function nullOfNumber(): ChainedValidator;
public static function nullOrNumber(): ChainedValidator;
public static function nullOfNumericVal(): ChainedValidator;
public static function nullOrNumericVal(): ChainedValidator;
public static function nullOfObjectType(): ChainedValidator;
public static function nullOrObjectType(): ChainedValidator;
public static function nullOfOdd(): ChainedValidator;
public static function nullOrOdd(): ChainedValidator;
public static function nullOfOneOf(
public static function nullOrOneOf(
Validatable $rule1,
Validatable $rule2,
Validatable ...$rules,
): ChainedValidator;
public static function nullOfPerfectSquare(): ChainedValidator;
public static function nullOrPerfectSquare(): ChainedValidator;
public static function nullOfPesel(): ChainedValidator;
public static function nullOrPesel(): ChainedValidator;
public static function nullOfPhone(?string $countryCode = null): ChainedValidator;
public static function nullOrPhone(?string $countryCode = null): ChainedValidator;
public static function nullOfPhpLabel(): ChainedValidator;
public static function nullOrPhpLabel(): ChainedValidator;
public static function nullOfPis(): ChainedValidator;
public static function nullOrPis(): ChainedValidator;
public static function nullOfPolishIdCard(): ChainedValidator;
public static function nullOrPolishIdCard(): ChainedValidator;
public static function nullOfPortugueseNif(): ChainedValidator;
public static function nullOrPortugueseNif(): ChainedValidator;
public static function nullOfPositive(): ChainedValidator;
public static function nullOrPositive(): ChainedValidator;
public static function nullOfPostalCode(string $countryCode, bool $formatted = false): ChainedValidator;
public static function nullOrPostalCode(string $countryCode, bool $formatted = false): ChainedValidator;
public static function nullOfPrimeNumber(): ChainedValidator;
public static function nullOrPrimeNumber(): ChainedValidator;
public static function nullOfPrintable(string ...$additionalChars): ChainedValidator;
public static function nullOrPrintable(string ...$additionalChars): ChainedValidator;
public static function nullOfProperty(string $propertyName, Validatable $rule): ChainedValidator;
public static function nullOrProperty(string $propertyName, Validatable $rule): ChainedValidator;
public static function nullOfPropertyExists(string $propertyName): ChainedValidator;
public static function nullOrPropertyExists(string $propertyName): ChainedValidator;
public static function nullOfPropertyOptional(string $propertyName, Validatable $rule): ChainedValidator;
public static function nullOrPropertyOptional(string $propertyName, Validatable $rule): ChainedValidator;
public static function nullOfPublicDomainSuffix(): ChainedValidator;
public static function nullOrPublicDomainSuffix(): ChainedValidator;
public static function nullOfPunct(string ...$additionalChars): ChainedValidator;
public static function nullOrPunct(string ...$additionalChars): ChainedValidator;
public static function nullOfReadable(): ChainedValidator;
public static function nullOrReadable(): ChainedValidator;
public static function nullOfRegex(string $regex): ChainedValidator;
public static function nullOrRegex(string $regex): ChainedValidator;
public static function nullOfResourceType(): ChainedValidator;
public static function nullOrResourceType(): ChainedValidator;
public static function nullOfRoman(): ChainedValidator;
public static function nullOrRoman(): ChainedValidator;
public static function nullOfScalarVal(): ChainedValidator;
public static function nullOrScalarVal(): ChainedValidator;
public static function nullOfSize(
public static function nullOrSize(
string|int|null $minSize = null,
string|int|null $maxSize = null,
): ChainedValidator;
public static function nullOfSlug(): ChainedValidator;
public static function nullOrSlug(): ChainedValidator;
public static function nullOfSorted(string $direction): ChainedValidator;
public static function nullOrSorted(string $direction): ChainedValidator;
public static function nullOfSpace(string ...$additionalChars): ChainedValidator;
public static function nullOrSpace(string ...$additionalChars): ChainedValidator;
public static function nullOfStartsWith(mixed $startValue, bool $identical = false): ChainedValidator;
public static function nullOrStartsWith(mixed $startValue, bool $identical = false): ChainedValidator;
public static function nullOfStringType(): ChainedValidator;
public static function nullOrStringType(): ChainedValidator;
public static function nullOfStringVal(): ChainedValidator;
public static function nullOrStringVal(): ChainedValidator;
public static function nullOfSubdivisionCode(string $countryCode): ChainedValidator;
public static function nullOrSubdivisionCode(string $countryCode): ChainedValidator;
/**
* @param mixed[] $superset
*/
public static function nullOfSubset(array $superset): ChainedValidator;
public static function nullOrSubset(array $superset): ChainedValidator;
public static function nullOfSymbolicLink(): ChainedValidator;
public static function nullOrSymbolicLink(): ChainedValidator;
public static function nullOfTime(string $format = 'H:i:s'): ChainedValidator;
public static function nullOrTime(string $format = 'H:i:s'): ChainedValidator;
public static function nullOfTld(): ChainedValidator;
public static function nullOrTld(): ChainedValidator;
public static function nullOfTrueVal(): ChainedValidator;
public static function nullOrTrueVal(): ChainedValidator;
public static function nullOfUnique(): ChainedValidator;
public static function nullOrUnique(): ChainedValidator;
public static function nullOfUploaded(): ChainedValidator;
public static function nullOrUploaded(): ChainedValidator;
public static function nullOfUppercase(): ChainedValidator;
public static function nullOrUppercase(): ChainedValidator;
public static function nullOfUrl(): ChainedValidator;
public static function nullOrUrl(): ChainedValidator;
public static function nullOfUuid(?int $version = null): ChainedValidator;
public static function nullOrUuid(?int $version = null): ChainedValidator;
public static function nullOfVersion(): ChainedValidator;
public static function nullOrVersion(): ChainedValidator;
public static function nullOfVideoUrl(?string $service = null): ChainedValidator;
public static function nullOrVideoUrl(?string $service = null): ChainedValidator;
public static function nullOfVowel(string ...$additionalChars): ChainedValidator;
public static function nullOrVowel(string ...$additionalChars): ChainedValidator;
public static function nullOfWhen(
public static function nullOrWhen(
Validatable $when,
Validatable $then,
?Validatable $else = null,
): ChainedValidator;
public static function nullOfWritable(): ChainedValidator;
public static function nullOrWritable(): ChainedValidator;
public static function nullOfXdigit(string ...$additionalChars): ChainedValidator;
public static function nullOrXdigit(string ...$additionalChars): ChainedValidator;
public static function nullOfYes(bool $useLocale = false): ChainedValidator;
public static function nullOrYes(bool $useLocale = false): ChainedValidator;
}

View file

@ -293,8 +293,6 @@ interface StaticProperty
public static function propertyNullType(string $propertyName): ChainedValidator;
public static function propertyNullable(string $propertyName, Validatable $rule): ChainedValidator;
public static function propertyNumber(string $propertyName): ChainedValidator;
public static function propertyNumericVal(string $propertyName): ChainedValidator;

View file

@ -256,8 +256,13 @@ interface StaticValidator extends
public static function notOptional(): ChainedValidator;
public static function nullOr(Validatable $rule): ChainedValidator;
public static function nullType(): ChainedValidator;
/**
* @deprecated Use {@see nullOr()} instead.
*/
public static function nullable(Validatable $rule): ChainedValidator;
public static function number(): ChainedValidator;

View file

@ -14,23 +14,23 @@ use Respect\Validation\Result;
use Respect\Validation\Rules\Core\Wrapper;
#[Template(
'The value must be nullable',
'The value must be null',
'The value must not be null',
self::TEMPLATE_STANDARD,
)]
#[Template(
'{{name}} must be nullable',
'{{name}} must be null',
'{{name}} must not be null',
self::TEMPLATE_NAMED,
)]
final class Nullable extends Wrapper
final class NullOr extends Wrapper
{
public const TEMPLATE_NAMED = '__named__';
public function evaluate(mixed $input): Result
{
if ($input !== null) {
return parent::evaluate($input);
return $this->rule->evaluate($input)->withPrefixedId('nullOr');
}
if ($this->getName()) {

View file

@ -15,6 +15,7 @@ use function in_array;
final class Aliases implements Transformer
{
private const ALIASES = [
'nullable' => 'nullOr',
'optional' => 'undefOr',
];

View file

@ -31,6 +31,7 @@ final class Prefix implements Transformer
'notEmoji',
'notEmpty',
'notOptional',
'nullOr',
'property',
'propertyExists',
'propertyOptional',
@ -68,7 +69,7 @@ final class Prefix implements Transformer
}
if (str_starts_with($ruleSpec->name, 'nullOr')) {
return new RuleSpec(substr($ruleSpec->name, 6), $ruleSpec->arguments, new RuleSpec('nullable'));
return new RuleSpec(substr($ruleSpec->name, 6), $ruleSpec->arguments, new RuleSpec('nullOr'));
}
if (str_starts_with($ruleSpec->name, 'property')) {

View file

@ -0,0 +1,93 @@
--FILE--
<?php
declare(strict_types=1);
require 'vendor/autoload.php';
use Respect\Validation\Validator as v;
run([
'Default' => [v::nullOr(v::alpha()), 1234],
'Negative wrapper' => [v::not(v::nullOr(v::alpha())), 'alpha'],
'Negative wrapped' => [v::nullOr(v::not(v::alpha())), 'alpha'],
'Negative nullined' => [v::not(v::nullOr(v::alpha())), null],
'Negative nullined, wrapped name' => [v::not(v::nullOr(v::alpha()->setName('Wrapped'))), null],
'Negative nullined, wrapper name' => [v::not(v::nullOr(v::alpha())->setName('Wrapper')), null],
'Negative nullined, not name' => [v::not(v::nullOr(v::alpha()))->setName('Not'), null],
'With template' => [v::nullOr(v::alpha()), 123, 'Nine nimble numismatists near Naples'],
'With array template' => [v::nullOr(v::alpha()), 123, ['nullOrAlpha' => 'Next to nifty null notations']],
]);
?>
--EXPECT--
Default
⎺⎺⎺⎺⎺⎺⎺
1234 must contain only letters (a-z)
- 1234 must contain only letters (a-z)
[
'nullOrAlpha' => '1234 must contain only letters (a-z)',
]
Negative wrapper
⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺
"alpha" must not contain letters (a-z)
- "alpha" must not contain letters (a-z)
[
'notNullOrAlpha' => '"alpha" must not contain letters (a-z)',
]
Negative wrapped
⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺
"alpha" must not contain letters (a-z)
- "alpha" must not contain letters (a-z)
[
'nullOrNotAlpha' => '"alpha" must not contain letters (a-z)',
]
Negative nullined
⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺
The value must not be null
- The value must not be null
[
'notNullOr' => 'The value must not be null',
]
Negative nullined, wrapped name
⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺
Wrapped must not be null
- Wrapped must not be null
[
'notNullOr' => 'Wrapped must not be null',
]
Negative nullined, wrapper name
⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺
Wrapper must not be null
- Wrapper must not be null
[
'notNullOr' => 'Wrapper must not be null',
]
Negative nullined, not name
⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺
Not must not be null
- Not must not be null
[
'notNullOr' => 'Not must not be null',
]
With template
⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺
Nine nimble numismatists near Naples
- Nine nimble numismatists near Naples
[
'nullOrAlpha' => 'Nine nimble numismatists near Naples',
]
With array template
⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺
Next to nifty null notations
- Next to nifty null notations
[
'nullOrAlpha' => 'Next to nifty null notations',
]

View file

@ -65,7 +65,7 @@ nullOr
"string" must be of type boolean
- "string" must be of type boolean
[
'boolType' => '"string" must be of type boolean',
'nullOrBoolType' => '"string" must be of type boolean',
]
property

View file

@ -0,0 +1,84 @@
<?php
/*
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
* 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(NullOr::class)]
final class NullOrTest extends RuleTestCase
{
#[Test]
public function itShouldUseStandardTemplateWhenItHasNameWhenInputIsOptional(): void
{
$rule = new NullOr(Stub::pass(1));
$result = $rule->evaluate(null);
self::assertSame($rule, $result->rule);
self::assertSame(NullOr::TEMPLATE_STANDARD, $result->template);
}
#[Test]
public function itShouldUseNamedTemplateWhenItHasNameWhenInputIsNullable(): void
{
$rule = new NullOr(Stub::pass(1));
$rule->setName('foo');
$result = $rule->evaluate(null);
self::assertSame($rule, $result->rule);
self::assertSame(NullOr::TEMPLATE_NAMED, $result->template);
}
#[Test]
public function itShouldUseWrappedRuleToEvaluateWhenNotNullable(): void
{
$input = new stdClass();
$wrapped = Stub::pass(2);
$rule = new NullOr($wrapped);
self::assertEquals($wrapped->evaluate($input)->withPrefixedId('nullOr'), $rule->evaluate($input));
}
/** @return iterable<string, array{NullOr, mixed}> */
public static function providerForValidInput(): iterable
{
yield 'null' => [new NullOr(Stub::daze()), null];
yield 'not null with passing rule' => [new NullOr(Stub::pass(1)), 42];
}
/** @return iterable<array{NullOr, mixed}> */
public static function providerForInvalidInput(): iterable
{
yield [new NullOr(Stub::fail(1)), ''];
yield [new NullOr(Stub::fail(1)), 1];
yield [new NullOr(Stub::fail(1)), []];
yield [new NullOr(Stub::fail(1)), ' '];
yield [new NullOr(Stub::fail(1)), 0];
yield [new NullOr(Stub::fail(1)), '0'];
yield [new NullOr(Stub::fail(1)), 0];
yield [new NullOr(Stub::fail(1)), '0.0'];
yield [new NullOr(Stub::fail(1)), false];
yield [new NullOr(Stub::fail(1)), ['']];
yield [new NullOr(Stub::fail(1)), [' ']];
yield [new NullOr(Stub::fail(1)), [0]];
yield [new NullOr(Stub::fail(1)), ['0']];
yield [new NullOr(Stub::fail(1)), [false]];
yield [new NullOr(Stub::fail(1)), [[''], [0]]];
yield [new NullOr(Stub::fail(1)), new stdClass()];
}
}

View file

@ -1,84 +0,0 @@
<?php
/*
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
* 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(Nullable::class)]
final class NullableTest extends RuleTestCase
{
#[Test]
public function itShouldUseStandardTemplateWhenItHasNameWhenInputIsOptional(): void
{
$rule = new Nullable(Stub::pass(1));
$result = $rule->evaluate(null);
self::assertSame($rule, $result->rule);
self::assertSame(Nullable::TEMPLATE_STANDARD, $result->template);
}
#[Test]
public function itShouldUseNamedTemplateWhenItHasNameWhenInputIsNullable(): void
{
$rule = new Nullable(Stub::pass(1));
$rule->setName('foo');
$result = $rule->evaluate(null);
self::assertSame($rule, $result->rule);
self::assertSame(Nullable::TEMPLATE_NAMED, $result->template);
}
#[Test]
public function itShouldUseWrappedRuleToEvaluateWhenNotNullable(): void
{
$input = new stdClass();
$wrapped = Stub::pass(2);
$rule = new Nullable($wrapped);
self::assertEquals($wrapped->evaluate($input), $rule->evaluate($input));
}
/** @return iterable<string, array{Nullable, mixed}> */
public static function providerForValidInput(): iterable
{
yield 'null' => [new Nullable(Stub::daze()), null];
yield 'not null with passing rule' => [new Nullable(Stub::pass(1)), 42];
}
/** @return iterable<array{Nullable, mixed}> */
public static function providerForInvalidInput(): iterable
{
yield [new Nullable(Stub::fail(1)), ''];
yield [new Nullable(Stub::fail(1)), 1];
yield [new Nullable(Stub::fail(1)), []];
yield [new Nullable(Stub::fail(1)), ' '];
yield [new Nullable(Stub::fail(1)), 0];
yield [new Nullable(Stub::fail(1)), '0'];
yield [new Nullable(Stub::fail(1)), 0];
yield [new Nullable(Stub::fail(1)), '0.0'];
yield [new Nullable(Stub::fail(1)), false];
yield [new Nullable(Stub::fail(1)), ['']];
yield [new Nullable(Stub::fail(1)), [' ']];
yield [new Nullable(Stub::fail(1)), [0]];
yield [new Nullable(Stub::fail(1)), ['0']];
yield [new Nullable(Stub::fail(1)), [false]];
yield [new Nullable(Stub::fail(1)), [[''], [0]]];
yield [new Nullable(Stub::fail(1)), new stdClass()];
}
}

View file

@ -30,4 +30,17 @@ final class AliasesTest extends TestCase
self::assertEquals($expected, $actual);
}
#[Test]
public function itShouldConvertNullableIntoNullOr(): void
{
$transformer = new Aliases(new StubTransformer());
$ruleSpec = new RuleSpec('nullable', [Stub::daze()]);
$actual = $transformer->transform($ruleSpec);
$expected = new RuleSpec('nullOr', $ruleSpec->arguments);
self::assertEquals($expected, $actual);
}
}

View file

@ -65,7 +65,7 @@ final class PrefixTest extends TestCase
],
'nullOr' => [
new RuleSpec('nullOrNextRule', [1, 10]),
new RuleSpec('NextRule', [1, 10], new RuleSpec('nullable')),
new RuleSpec('NextRule', [1, 10], new RuleSpec('nullOr')),
],
'property' => [
new RuleSpec('propertyNextRule', ['propertyName', 567]),