Skip to content

Commit

Permalink
Split BeforeValidationInterface to separate interfaces (#331)
Browse files Browse the repository at this point in the history
  • Loading branch information
vjik authored Oct 9, 2022
1 parent 623628e commit fe43ea1
Show file tree
Hide file tree
Showing 28 changed files with 231 additions and 152 deletions.
11 changes: 7 additions & 4 deletions src/Rule/AtLeast.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,26 @@

use Attribute;
use Closure;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnEmptyTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnErrorTrait;
use Yiisoft\Validator\Rule\Trait\WhenTrait;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\SkipOnEmptyInterface;
use Yiisoft\Validator\SkipOnErrorInterface;
use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\WhenInterface;

/**
* Checks if at least {@see AtLeast::$min} of many attributes are filled.
*/
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class AtLeast implements SerializableRuleInterface, BeforeValidationInterface, SkipOnEmptyInterface
final class AtLeast implements SerializableRuleInterface, SkipOnErrorInterface, WhenInterface, SkipOnEmptyInterface
{
use BeforeValidationTrait;
use RuleNameTrait;
use SkipOnEmptyTrait;
use SkipOnErrorTrait;
use WhenTrait;

public function __construct(
/**
Expand Down
11 changes: 7 additions & 4 deletions src/Rule/Boolean.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,26 @@

use Attribute;
use Closure;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnEmptyTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnErrorTrait;
use Yiisoft\Validator\Rule\Trait\WhenTrait;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\SkipOnEmptyInterface;
use Yiisoft\Validator\SkipOnErrorInterface;
use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\WhenInterface;

/**
* Checks if the value is a boolean value or a value corresponding to it.
*/
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class Boolean implements SerializableRuleInterface, BeforeValidationInterface, SkipOnEmptyInterface
final class Boolean implements SerializableRuleInterface, SkipOnEmptyInterface, SkipOnErrorInterface, WhenInterface
{
use BeforeValidationTrait;
use RuleNameTrait;
use SkipOnEmptyTrait;
use SkipOnErrorTrait;
use WhenTrait;

public function __construct(
/**
Expand Down
12 changes: 8 additions & 4 deletions src/Rule/Callback.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,30 @@
use InvalidArgumentException;
use TypeError;
use Yiisoft\Validator\AttributeEventInterface;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\DataSet\ObjectDataSet;
use Yiisoft\Validator\DataSetInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnEmptyTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnErrorTrait;
use Yiisoft\Validator\Rule\Trait\WhenTrait;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\SkipOnEmptyInterface;
use Yiisoft\Validator\SkipOnErrorInterface;
use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\WhenInterface;

#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class Callback implements
SerializableRuleInterface,
BeforeValidationInterface,
SkipOnErrorInterface,
WhenInterface,
SkipOnEmptyInterface,
AttributeEventInterface
{
use BeforeValidationTrait;
use RuleNameTrait;
use SkipOnEmptyTrait;
use SkipOnErrorTrait;
use WhenTrait;

public function __construct(
/**
Expand Down
11 changes: 7 additions & 4 deletions src/Rule/Compare.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,22 @@
use Closure;
use InvalidArgumentException;
use RuntimeException;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnEmptyTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnErrorTrait;
use Yiisoft\Validator\Rule\Trait\WhenTrait;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\SkipOnEmptyInterface;
use Yiisoft\Validator\SkipOnErrorInterface;
use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\WhenInterface;

abstract class Compare implements SerializableRuleInterface, BeforeValidationInterface, SkipOnEmptyInterface
abstract class Compare implements SerializableRuleInterface, SkipOnEmptyInterface, SkipOnErrorInterface, WhenInterface
{
use BeforeValidationTrait;
use RuleNameTrait;
use SkipOnEmptyTrait;
use SkipOnErrorTrait;
use WhenTrait;

/**
* Constant for specifying the comparison as string values.
Expand Down
11 changes: 7 additions & 4 deletions src/Rule/Composite.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,27 @@
use Attribute;
use Closure;
use JetBrains\PhpStorm\ArrayShape;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnEmptyTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnErrorTrait;
use Yiisoft\Validator\Rule\Trait\WhenTrait;
use Yiisoft\Validator\RuleInterface;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\SkipOnEmptyInterface;
use Yiisoft\Validator\SkipOnErrorInterface;
use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\WhenInterface;

/**
* Allows to combine and validate multiple rules.
*/
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
class Composite implements SerializableRuleInterface, BeforeValidationInterface, SkipOnEmptyInterface
class Composite implements SerializableRuleInterface, SkipOnErrorInterface, WhenInterface, SkipOnEmptyInterface
{
use BeforeValidationTrait;
use RuleNameTrait;
use SkipOnEmptyTrait;
use SkipOnErrorTrait;
use WhenTrait;

public function __construct(
/**
Expand Down
11 changes: 7 additions & 4 deletions src/Rule/Count.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,29 @@
use Attribute;
use Closure;
use Countable;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\LimitTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnEmptyTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnErrorTrait;
use Yiisoft\Validator\Rule\Trait\WhenTrait;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\SkipOnEmptyInterface;
use Yiisoft\Validator\SkipOnErrorInterface;
use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\WhenInterface;

/**
* Validates that the value contains certain number of items. Can be applied to arrays or classes implementing
* {@see Countable} interface.
*/
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class Count implements SerializableRuleInterface, BeforeValidationInterface, SkipOnEmptyInterface
final class Count implements SerializableRuleInterface, SkipOnErrorInterface, WhenInterface, SkipOnEmptyInterface
{
use BeforeValidationTrait;
use LimitTrait;
use RuleNameTrait;
use SkipOnEmptyTrait;
use SkipOnErrorTrait;
use WhenTrait;

public function __construct(
/**
Expand Down
28 changes: 19 additions & 9 deletions src/Rule/Each.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,37 @@
use Attribute;
use Closure;
use JetBrains\PhpStorm\ArrayShape;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\PropagateOptionsInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnEmptyTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnErrorTrait;
use Yiisoft\Validator\Rule\Trait\WhenTrait;
use Yiisoft\Validator\RuleInterface;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\SkipOnEmptyInterface;
use Yiisoft\Validator\SkipOnErrorInterface;
use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\WhenInterface;

/**
* Validates an array by checking each of its elements against a set of rules.
*/
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class Each implements
SerializableRuleInterface,
BeforeValidationInterface,
SkipOnErrorInterface,
WhenInterface,
SkipOnEmptyInterface,
PropagateOptionsInterface
{
use BeforeValidationTrait;
use RuleNameTrait;
use SkipOnEmptyTrait;
use SkipOnErrorTrait;
use WhenTrait;

public function __construct(
/**
* @var iterable<BeforeValidationInterface|RuleInterface|SkipOnEmptyInterface>
* @var iterable<RuleInterface>
*/
private iterable $rules = [],
private string $incorrectInputMessage = 'Value must be array or iterable.',
Expand All @@ -55,9 +59,15 @@ public function propagateOptions(): void
{
$rules = [];
foreach ($this->rules as $rule) {
$rule = $rule->skipOnEmpty($this->skipOnEmpty);
$rule = $rule->skipOnError($this->skipOnError);
$rule = $rule->when($this->when);
if ($rule instanceof SkipOnEmptyInterface) {
$rule = $rule->skipOnEmpty($this->skipOnEmpty);
}
if ($rule instanceof SkipOnErrorInterface) {
$rule = $rule->skipOnError($this->skipOnError);
}
if ($rule instanceof WhenInterface) {
$rule = $rule->when($this->when);
}

$rules[] = $rule;

Expand All @@ -70,7 +80,7 @@ public function propagateOptions(): void
}

/**
* @return iterable<BeforeValidationInterface|BeforeValidationInterface[]|\Closure|\Closure[]|RuleInterface|RuleInterface[]|SkipOnEmptyInterface|SkipOnEmptyInterface[]>
* @return iterable<Closure|Closure[]|RuleInterface|RuleInterface[]>
*/
public function getRules(): iterable
{
Expand Down
11 changes: 7 additions & 4 deletions src/Rule/Email.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,28 @@
use Attribute;
use Closure;
use RuntimeException;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnEmptyTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnErrorTrait;
use Yiisoft\Validator\Rule\Trait\WhenTrait;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\SkipOnEmptyInterface;
use Yiisoft\Validator\SkipOnErrorInterface;
use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\WhenInterface;

use function function_exists;

/**
* Validates that the value is a valid email address.
*/
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class Email implements SerializableRuleInterface, BeforeValidationInterface, SkipOnEmptyInterface
final class Email implements SerializableRuleInterface, SkipOnErrorInterface, WhenInterface, SkipOnEmptyInterface
{
use BeforeValidationTrait;
use RuleNameTrait;
use SkipOnEmptyTrait;
use SkipOnErrorTrait;
use WhenTrait;

public function __construct(
/**
Expand Down
11 changes: 7 additions & 4 deletions src/Rule/HasLength.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,30 @@

use Attribute;
use Closure;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\LimitTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnEmptyTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnErrorTrait;
use Yiisoft\Validator\Rule\Trait\WhenTrait;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\SkipOnEmptyInterface;
use Yiisoft\Validator\SkipOnErrorInterface;
use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\WhenInterface;

/**
* Validates that the value is of certain length.
*
* Note, this rule should only be used with strings.
*/
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class HasLength implements SerializableRuleInterface, BeforeValidationInterface, SkipOnEmptyInterface
final class HasLength implements SerializableRuleInterface, SkipOnErrorInterface, WhenInterface, SkipOnEmptyInterface
{
use BeforeValidationTrait;
use LimitTrait;
use RuleNameTrait;
use SkipOnEmptyTrait;
use SkipOnErrorTrait;
use WhenTrait;

public function __construct(
/**
Expand Down
11 changes: 7 additions & 4 deletions src/Rule/InRange.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@

use Attribute;
use Closure;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnEmptyTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnErrorTrait;
use Yiisoft\Validator\Rule\Trait\WhenTrait;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\SkipOnEmptyInterface;
use Yiisoft\Validator\SkipOnErrorInterface;
use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\WhenInterface;

/**
* Validates that the value is among a list of values.
Expand All @@ -21,11 +23,12 @@
* If the {@see InRange::$not} is called, the rule will ensure the value is NOT among the specified range.
*/
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class InRange implements SerializableRuleInterface, BeforeValidationInterface, SkipOnEmptyInterface
final class InRange implements SerializableRuleInterface, SkipOnErrorInterface, WhenInterface, SkipOnEmptyInterface
{
use BeforeValidationTrait;
use RuleNameTrait;
use SkipOnEmptyTrait;
use SkipOnErrorTrait;
use WhenTrait;

public function __construct(
private iterable $range,
Expand Down
11 changes: 7 additions & 4 deletions src/Rule/Ip.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@
use Closure;
use RuntimeException;
use Yiisoft\NetworkUtilities\IpHelper;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnEmptyTrait;
use Yiisoft\Validator\Rule\Trait\SkipOnErrorTrait;
use Yiisoft\Validator\Rule\Trait\WhenTrait;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\SkipOnEmptyInterface;
use Yiisoft\Validator\SkipOnErrorInterface;
use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\WhenInterface;

use function array_key_exists;
use function strlen;
Expand All @@ -25,11 +27,12 @@
* It also may change the value if normalization of IPv6 expansion is enabled.
*/
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class Ip implements SerializableRuleInterface, BeforeValidationInterface, SkipOnEmptyInterface
final class Ip implements SerializableRuleInterface, SkipOnErrorInterface, WhenInterface, SkipOnEmptyInterface
{
use BeforeValidationTrait;
use RuleNameTrait;
use SkipOnEmptyTrait;
use SkipOnErrorTrait;
use WhenTrait;

/**
* Negation char.
Expand Down
Loading

0 comments on commit fe43ea1

Please sign in to comment.