Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion docs/migrating-from-v2-to-v3.md
Original file line number Diff line number Diff line change
Expand Up @@ -556,7 +556,6 @@ final class Custom implements Validator
Base classes available in `Respect\Validation\Validators\Core`:

- `Simple` - For validators with simple boolean logic
- `Wrapper` - For validators that wrap another validator
- `Composite` - For validators that combine multiple validators
- `Envelope` - For validators that modify how another validator works

Expand Down
2 changes: 1 addition & 1 deletion src/ValidatorBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
use function is_string;

/** @mixin Builder */
final readonly class ValidatorBuilder implements Validator, Nameable
final readonly class ValidatorBuilder implements Nameable
{
/** @var array<Validator> */
private array $validators;
Expand Down
8 changes: 7 additions & 1 deletion src/Validators/Core/FilteredArray.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,19 @@
namespace Respect\Validation\Validators\Core;

use Respect\Validation\Result;
use Respect\Validation\Validator;
use Respect\Validation\Validators\IterableType;

use function is_array;
use function iterator_to_array;

abstract class FilteredArray extends Wrapper
abstract class FilteredArray implements Validator
{
public function __construct(
protected Validator $validator,
) {
}

public function evaluate(mixed $input): Result
{
$iterableResult = (new IterableType())->evaluate($input);
Expand Down
3 changes: 2 additions & 1 deletion src/Validators/Core/Nameable.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@
namespace Respect\Validation\Validators\Core;

use Respect\Validation\Name;
use Respect\Validation\Validator;

interface Nameable
interface Nameable extends Validator
{
public function getName(): Name|null;
}
12 changes: 10 additions & 2 deletions src/Validators/Core/Reducer.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,21 @@

namespace Respect\Validation\Validators\Core;

use Respect\Validation\Result;
use Respect\Validation\Validator;
use Respect\Validation\Validators\AllOf;

final class Reducer extends Wrapper
final readonly class Reducer implements Validator
{
private Validator $validator;

public function __construct(Validator $validator1, Validator ...$validators)
{
parent::__construct($validators === [] ? $validator1 : new AllOf($validator1, ...$validators));
$this->validator = $validators === [] ? $validator1 : new AllOf($validator1, ...$validators);
}

public function evaluate(mixed $input): Result
{
return $this->validator->evaluate($input);
}
}
32 changes: 0 additions & 32 deletions src/Validators/Core/Wrapper.php

This file was deleted.

8 changes: 3 additions & 5 deletions src/Validators/Key.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,14 @@
use Respect\Validation\Result;
use Respect\Validation\Validator;
use Respect\Validation\Validators\Core\KeyRelated;
use Respect\Validation\Validators\Core\Wrapper;

#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class Key extends Wrapper implements KeyRelated
final readonly class Key implements KeyRelated
{
public function __construct(
private readonly int|string $key,
Validator $validator,
private int|string $key,
private Validator $validator,
) {
parent::__construct($validator);
}

public function getKey(): int|string
Expand Down
8 changes: 3 additions & 5 deletions src/Validators/KeyOptional.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,14 @@
use Respect\Validation\Result;
use Respect\Validation\Validator;
use Respect\Validation\Validators\Core\KeyRelated;
use Respect\Validation\Validators\Core\Wrapper;

#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class KeyOptional extends Wrapper implements KeyRelated
final readonly class KeyOptional implements KeyRelated
{
public function __construct(
private readonly int|string $key,
Validator $validator,
private int|string $key,
private Validator $validator,
) {
parent::__construct($validator);
}

public function getKey(): int|string
Expand Down
9 changes: 7 additions & 2 deletions src/Validators/Length.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
use Countable as PhpCountable;
use Respect\Validation\Message\Template;
use Respect\Validation\Result;
use Respect\Validation\Validators\Core\Wrapper;
use Respect\Validation\Validator;

use function count;
use function is_array;
Expand All @@ -40,10 +40,15 @@
'{{subject}} must not be a countable value or a string',
self::TEMPLATE_WRONG_TYPE,
)]
final class Length extends Wrapper
final readonly class Length implements Validator
{
public const string TEMPLATE_WRONG_TYPE = '__wrong_type__';

public function __construct(
private Validator $validator,
) {
}

public function evaluate(mixed $input): Result
{
$length = $this->extractLength($input);
Expand Down
13 changes: 6 additions & 7 deletions src/Validators/Named.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,18 @@
use Respect\Validation\Result;
use Respect\Validation\Validator;
use Respect\Validation\Validators\Core\Nameable;
use Respect\Validation\Validators\Core\Wrapper;

use function is_string;

#[Attribute(Attribute::TARGET_PROPERTY | Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)]
final class Named extends Wrapper implements Nameable
final readonly class Named implements Nameable
{
private readonly Name $name;

public function __construct(string|Name $name, Validator $validator)
{
parent::__construct($validator);
private Name $name;

public function __construct(
string|Name $name,
private Validator $validator,
) {
$this->name = is_string($name) ? new Name($name) : $name;
}

Expand Down
9 changes: 7 additions & 2 deletions src/Validators/Not.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,16 @@

use Attribute;
use Respect\Validation\Result;
use Respect\Validation\Validators\Core\Wrapper;
use Respect\Validation\Validator;

#[Attribute(Attribute::TARGET_PROPERTY | Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)]
final class Not extends Wrapper
final readonly class Not implements Validator
{
public function __construct(
private Validator $validator,
) {
}

public function evaluate(mixed $input): Result
{
$result = $this->validator->evaluate($input);
Expand Down
9 changes: 7 additions & 2 deletions src/Validators/NullOr.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
use Attribute;
use Respect\Validation\Message\Template;
use Respect\Validation\Result;
use Respect\Validation\Validators\Core\Wrapper;
use Respect\Validation\Validator;

use function array_map;

Expand All @@ -25,8 +25,13 @@
'or must be null',
'and must not be null',
)]
final class NullOr extends Wrapper
final readonly class NullOr implements Validator
{
public function __construct(
private Validator $validator,
) {
}

public function evaluate(mixed $input): Result
{
$result = $this->validator->evaluate($input);
Expand Down
8 changes: 3 additions & 5 deletions src/Validators/Property.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,14 @@
use Respect\Validation\Path;
use Respect\Validation\Result;
use Respect\Validation\Validator;
use Respect\Validation\Validators\Core\Wrapper;

#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class Property extends Wrapper
final readonly class Property implements Validator
{
public function __construct(
private readonly string $propertyName,
Validator $validator,
private string $propertyName,
private Validator $validator,
) {
parent::__construct($validator);
}

public function evaluate(mixed $input): Result
Expand Down
8 changes: 3 additions & 5 deletions src/Validators/PropertyOptional.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,14 @@
use Attribute;
use Respect\Validation\Result;
use Respect\Validation\Validator;
use Respect\Validation\Validators\Core\Wrapper;

#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class PropertyOptional extends Wrapper
final readonly class PropertyOptional implements Validator
{
public function __construct(
private readonly string $propertyName,
Validator $validator,
private string $propertyName,
private Validator $validator,
) {
parent::__construct($validator);
}

public function evaluate(mixed $input): Result
Expand Down
9 changes: 3 additions & 6 deletions src/Validators/Size.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
use Respect\Validation\Message\Template;
use Respect\Validation\Result;
use Respect\Validation\Validator;
use Respect\Validation\Validators\Core\Wrapper;
use SplFileInfo;

use function filesize;
Expand All @@ -37,7 +36,7 @@
'{{subject}} must not be a filename or an instance of SplFileInfo or a PSR-7 interface',
self::TEMPLATE_WRONG_TYPE,
)]
final class Size extends Wrapper
final readonly class Size implements Validator
{
public const string TEMPLATE_WRONG_TYPE = '__wrong_type__';

Expand All @@ -55,14 +54,12 @@ final class Size extends Wrapper

/** @param "B"|"KB"|"MB"|"GB"|"TB"|"PB"|"EB"|"ZB"|"YB" $unit */
public function __construct(
private readonly string $unit,
Validator $validator,
private string $unit,
private Validator $validator,
) {
if (!isset(self::DATA_STORAGE_UNITS[$unit])) {
throw new InvalidValidatorException('"%s" is not a recognized data storage unit.', $unit);
}

parent::__construct($validator);
}

public function evaluate(mixed $input): Result
Expand Down
10 changes: 4 additions & 6 deletions src/Validators/Templated.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,16 @@
use Attribute;
use Respect\Validation\Result;
use Respect\Validation\Validator;
use Respect\Validation\Validators\Core\Wrapper;

#[Attribute(Attribute::TARGET_PROPERTY | Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)]
final class Templated extends Wrapper
final readonly class Templated implements Validator
{
/** @param array<string, mixed> $parameters */
public function __construct(
private readonly string $template,
Validator $validator,
private readonly array $parameters = [],
private string $template,
private Validator $validator,
private array $parameters = [],
) {
parent::__construct($validator);
}

public function evaluate(mixed $input): Result
Expand Down
9 changes: 7 additions & 2 deletions src/Validators/UndefOr.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
use Respect\Validation\Helpers\CanValidateUndefined;
use Respect\Validation\Message\Template;
use Respect\Validation\Result;
use Respect\Validation\Validators\Core\Wrapper;
use Respect\Validation\Validator;

use function array_map;

Expand All @@ -25,10 +25,15 @@
'or must be undefined',
'and must not be undefined',
)]
final class UndefOr extends Wrapper
final readonly class UndefOr implements Validator
{
use CanValidateUndefined;

public function __construct(
private Validator $validator,
) {
}

public function evaluate(mixed $input): Result
{
$result = $this->validator->evaluate($input);
Expand Down
21 changes: 0 additions & 21 deletions tests/src/Validators/Core/ConcreteWrapper.php

This file was deleted.

Loading