diff --git a/bin/create-mixin b/bin/create-mixin index 76290235..c28c233d 100755 --- a/bin/create-mixin +++ b/bin/create-mixin @@ -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); diff --git a/library/Mixins/ChainedKey.php b/library/Mixins/ChainedKey.php index a80c4e2b..b582fa0f 100644 --- a/library/Mixins/ChainedKey.php +++ b/library/Mixins/ChainedKey.php @@ -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; diff --git a/library/Mixins/ChainedNot.php b/library/Mixins/ChainedNot.php index 9c75023c..7c3dea99 100644 --- a/library/Mixins/ChainedNot.php +++ b/library/Mixins/ChainedNot.php @@ -236,8 +236,6 @@ interface ChainedNot public function notNullType(): ChainedValidator; - public function notNullable(Validatable $rule): ChainedValidator; - public function notNumber(): ChainedValidator; public function notNumericVal(): ChainedValidator; diff --git a/library/Mixins/ChainedNullOr.php b/library/Mixins/ChainedNullOr.php index 72ba2140..ecbf7c89 100644 --- a/library/Mixins/ChainedNullOr.php +++ b/library/Mixins/ChainedNullOr.php @@ -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 $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; } diff --git a/library/Mixins/ChainedProperty.php b/library/Mixins/ChainedProperty.php index 82db33f9..b9633429 100644 --- a/library/Mixins/ChainedProperty.php +++ b/library/Mixins/ChainedProperty.php @@ -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; diff --git a/library/Mixins/ChainedValidator.php b/library/Mixins/ChainedValidator.php index 39ce9d66..6c4fee8f 100644 --- a/library/Mixins/ChainedValidator.php +++ b/library/Mixins/ChainedValidator.php @@ -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; diff --git a/library/Mixins/StaticKey.php b/library/Mixins/StaticKey.php index dfc76401..4d52c00d 100644 --- a/library/Mixins/StaticKey.php +++ b/library/Mixins/StaticKey.php @@ -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; diff --git a/library/Mixins/StaticNot.php b/library/Mixins/StaticNot.php index d5442a3a..ac67b783 100644 --- a/library/Mixins/StaticNot.php +++ b/library/Mixins/StaticNot.php @@ -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; diff --git a/library/Mixins/StaticNullOr.php b/library/Mixins/StaticNullOr.php index 5eb7431e..883448c9 100644 --- a/library/Mixins/StaticNullOr.php +++ b/library/Mixins/StaticNullOr.php @@ -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 $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; } diff --git a/library/Mixins/StaticProperty.php b/library/Mixins/StaticProperty.php index f438a5cc..4fed1ca6 100644 --- a/library/Mixins/StaticProperty.php +++ b/library/Mixins/StaticProperty.php @@ -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; diff --git a/library/Mixins/StaticValidator.php b/library/Mixins/StaticValidator.php index c3dbfbc0..be152d57 100644 --- a/library/Mixins/StaticValidator.php +++ b/library/Mixins/StaticValidator.php @@ -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; diff --git a/library/Rules/Nullable.php b/library/Rules/NullOr.php similarity index 81% rename from library/Rules/Nullable.php rename to library/Rules/NullOr.php index 5a7d0d77..3d70c0ec 100644 --- a/library/Rules/Nullable.php +++ b/library/Rules/NullOr.php @@ -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()) { diff --git a/library/Transformers/Aliases.php b/library/Transformers/Aliases.php index 7802a393..12284ec4 100644 --- a/library/Transformers/Aliases.php +++ b/library/Transformers/Aliases.php @@ -15,6 +15,7 @@ use function in_array; final class Aliases implements Transformer { private const ALIASES = [ + 'nullable' => 'nullOr', 'optional' => 'undefOr', ]; diff --git a/library/Transformers/Prefix.php b/library/Transformers/Prefix.php index 4d7d6ec2..389b83e1 100644 --- a/library/Transformers/Prefix.php +++ b/library/Transformers/Prefix.php @@ -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')) { diff --git a/tests/integration/rules/nullOr.phpt b/tests/integration/rules/nullOr.phpt new file mode 100644 index 00000000..ee0213ac --- /dev/null +++ b/tests/integration/rules/nullOr.phpt @@ -0,0 +1,93 @@ +--FILE-- + [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', +] diff --git a/tests/integration/transformers/prefix.phpt b/tests/integration/transformers/prefix.phpt index a3a0ddb1..8f6734a8 100644 --- a/tests/integration/transformers/prefix.phpt +++ b/tests/integration/transformers/prefix.phpt @@ -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 diff --git a/tests/unit/Rules/NullOrTest.php b/tests/unit/Rules/NullOrTest.php new file mode 100644 index 00000000..a82cef99 --- /dev/null +++ b/tests/unit/Rules/NullOrTest.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(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 */ + 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 */ + 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()]; + } +} diff --git a/tests/unit/Rules/NullableTest.php b/tests/unit/Rules/NullableTest.php deleted file mode 100644 index c92543af..00000000 --- a/tests/unit/Rules/NullableTest.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(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 */ - 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 */ - 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()]; - } -} diff --git a/tests/unit/Transformers/AliasesTest.php b/tests/unit/Transformers/AliasesTest.php index 5e5d2548..86f51f98 100644 --- a/tests/unit/Transformers/AliasesTest.php +++ b/tests/unit/Transformers/AliasesTest.php @@ -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); + } } diff --git a/tests/unit/Transformers/PrefixTest.php b/tests/unit/Transformers/PrefixTest.php index 8c56486c..9e5e103e 100644 --- a/tests/unit/Transformers/PrefixTest.php +++ b/tests/unit/Transformers/PrefixTest.php @@ -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]),