Skip to content

Commit

Permalink
Fix #264: Remove GroupRule in favor of Composite (#267)
Browse files Browse the repository at this point in the history
  • Loading branch information
samdark committed Jul 22, 2022
1 parent 89f940c commit 819311c
Show file tree
Hide file tree
Showing 35 changed files with 125 additions and 343 deletions.
23 changes: 10 additions & 13 deletions README.md
Expand Up @@ -47,7 +47,6 @@ Library could be used in two ways: validating a single value and validating a se

```php
use Yiisoft\Validator\ValidatorInterface;
use Yiisoft\Validator\RuleSet;
use Yiisoft\Validator\Rule\Required;
use Yiisoft\Validator\Rule\Number;
use Yiisoft\Validator\Result;
Expand Down Expand Up @@ -223,7 +222,6 @@ use Yiisoft\Validator\ValidatorInterface;
use Yiisoft\Validator\Rule\Count;
use Yiisoft\Validator\Rule\Each;
use Yiisoft\Validator\Rule\Nested;
use Yiisoft\Validator\RuleSet;

// Usually obtained from container
$validator = $container->get(ValidatorInterface::class);
Expand Down Expand Up @@ -373,11 +371,11 @@ final class Post

```php
use Attribute;
use \Yiisoft\Validator\Exception\UnexpectedRuleException;
use Yiisoft\Validator\Exception\UnexpectedRuleException;
use Yiisoft\Validator\Result;
use Yiisoft\Validator\Rule\Number;
use Yiisoft\Validator\RuleHandlerInterface;
use \Yiisoft\Validator\RuleInterface;
use Yiisoft\Validator\RuleInterface;
use Yiisoft\Validator\ValidationContext;

#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
Expand Down Expand Up @@ -457,12 +455,12 @@ namespace App\Validator\Rule;

use Attribute;
use Yiisoft\Validator\Rule\Each;
use Yiisoft\Validator\Rule\GroupRule;
use Yiisoft\Validator\Rule\Composite;

#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class RgbRule extends GroupRule
final class RgbRule extends Composite
{
public function getRuleSet(): array
public function getRules(): array
{
return [
new Each([
Expand Down Expand Up @@ -754,19 +752,18 @@ final class Coordinate implements RuleInterface
To reuse multiple validation rules it is advised to group rules like the following:

```php
use Yiisoft\Validator\RuleSet;
use Yiisoft\Validator\Rule\HasLength;
use Yiisoft\Validator\Rule\Regex;
use \Yiisoft\Validator\Rule\GroupRule;
use \Yiisoft\Validator\Rule\Composite;

final class UsernameRule extends GroupRule
final class UsernameRule extends Composite
{
public function getRuleSet(): RuleSet
public function getRules(): array
{
return new RuleSet([
return [
new HasLength(min: 2, max: 20),
new Regex('~[a-z_\-]~i'),
]);
];
}
}
```
Expand Down
9 changes: 4 additions & 5 deletions src/Attribute/Embedded.php
Expand Up @@ -8,30 +8,29 @@
use Closure;
use ReflectionAttribute;
use ReflectionClass;
use Yiisoft\Validator\Rule\GroupRule;
use Yiisoft\Validator\Rule\Composite;
use Yiisoft\Validator\RuleInterface;
use Yiisoft\Validator\ValidationContext;

/**
* Collects all attributes from the reference and represents it as its own.
*/
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class Embedded extends GroupRule
final class Embedded extends Composite
{
/**
* @psalm-param Closure(mixed, ValidationContext):bool|null $when
*/
public function __construct(
private string $referenceClassName,
string $message = 'This value is not a valid.',
bool $skipOnEmpty = false,
bool $skipOnError = false,
?Closure $when = null,
) {
parent::__construct($message, $skipOnEmpty, $skipOnError, $when);
parent::__construct([], $skipOnEmpty, $skipOnError, $when);
}

public function getRuleSet(): array
public function getRules(): array
{
$classMeta = new ReflectionClass($this->referenceClassName);

Expand Down
7 changes: 5 additions & 2 deletions src/Rule/AtLeast.php
Expand Up @@ -9,7 +9,6 @@
use JetBrains\PhpStorm\ArrayShape;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\ValidationContext;
Expand All @@ -21,7 +20,6 @@
final class AtLeast implements SerializableRuleInterface, BeforeValidationInterface
{
use BeforeValidationTrait;
use HandlerClassNameTrait;
use RuleNameTrait;

public function __construct(
Expand Down Expand Up @@ -88,4 +86,9 @@ public function getOptions(): array
'skipOnError' => $this->skipOnError,
];
}

public function getHandlerClassName(): string
{
return AtLeastHandler::class;
}
}
7 changes: 5 additions & 2 deletions src/Rule/Boolean.php
Expand Up @@ -9,7 +9,6 @@
use JetBrains\PhpStorm\ArrayShape;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\ValidationContext;
Expand All @@ -21,7 +20,6 @@
final class Boolean implements SerializableRuleInterface, BeforeValidationInterface
{
use BeforeValidationTrait;
use HandlerClassNameTrait;
use RuleNameTrait;

public function __construct(
Expand Down Expand Up @@ -106,4 +104,9 @@ public function getOptions(): array
'skipOnError' => $this->skipOnError,
];
}

public function getHandlerClassName(): string
{
return BooleanHandler::class;
}
}
7 changes: 5 additions & 2 deletions src/Rule/Callback.php
Expand Up @@ -8,15 +8,13 @@
use JetBrains\PhpStorm\ArrayShape;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\ValidationContext;

final class Callback implements SerializableRuleInterface, BeforeValidationInterface
{
use BeforeValidationTrait;
use HandlerClassNameTrait;
use RuleNameTrait;

public function __construct(
Expand Down Expand Up @@ -49,4 +47,9 @@ public function getOptions(): array
'skipOnError' => $this->skipOnError,
];
}

public function getHandlerClassName(): string
{
return CallbackHandler::class;
}
}
7 changes: 5 additions & 2 deletions src/Rule/Compare.php
Expand Up @@ -11,14 +11,12 @@
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\ValidationContext;

abstract class Compare implements SerializableRuleInterface, BeforeValidationInterface
{
use BeforeValidationTrait;
use HandlerClassNameTrait;
use RuleNameTrait;

/**
Expand Down Expand Up @@ -157,4 +155,9 @@ public function getOptions(): array
'skipOnError' => $this->skipOnError,
];
}

public function getHandlerClassName(): string
{
return CompareHandler::class;
}
}
9 changes: 6 additions & 3 deletions src/Rule/Composite.php
Expand Up @@ -9,7 +9,6 @@
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\RuleInterface;
use Yiisoft\Validator\ValidationContext;
Expand All @@ -18,10 +17,9 @@
* Validates that the value is a valid json.
*/
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
final class Composite implements SerializableRuleInterface, BeforeValidationInterface
class Composite implements SerializableRuleInterface, BeforeValidationInterface
{
use BeforeValidationTrait;
use HandlerClassNameTrait;
use RuleNameTrait;

public function __construct(
Expand Down Expand Up @@ -58,4 +56,9 @@ public function getRules(): iterable
{
return $this->rules;
}

public function getHandlerClassName(): string
{
return CompositeHandler::class;
}
}
7 changes: 5 additions & 2 deletions src/Rule/Count.php
Expand Up @@ -11,7 +11,6 @@
use JetBrains\PhpStorm\ArrayShape;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\ValidationContext;
Expand All @@ -24,7 +23,6 @@
final class Count implements SerializableRuleInterface, BeforeValidationInterface
{
use BeforeValidationTrait;
use HandlerClassNameTrait;
use RuleNameTrait;

public function __construct(
Expand Down Expand Up @@ -181,4 +179,9 @@ public function getOptions(): array
'skipOnError' => $this->skipOnError,
];
}

public function getHandlerClassName(): string
{
return CountHandler::class;
}
}
7 changes: 5 additions & 2 deletions src/Rule/Each.php
Expand Up @@ -8,7 +8,6 @@
use Closure;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
use Yiisoft\Validator\RuleInterface;
Expand All @@ -21,7 +20,6 @@
final class Each implements SerializableRuleInterface, BeforeValidationInterface
{
use BeforeValidationTrait;
use HandlerClassNameTrait;
use RuleNameTrait;

public function __construct(
Expand Down Expand Up @@ -76,4 +74,9 @@ public function getOptions(): array
}
return $arrayOfRules;
}

public function getHandlerClassName(): string
{
return EachHandler::class;
}
}
7 changes: 5 additions & 2 deletions src/Rule/Email.php
Expand Up @@ -10,7 +10,6 @@
use RuntimeException;
use Yiisoft\Validator\SerializableRuleInterface;
use Yiisoft\Validator\BeforeValidationInterface;
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;

Expand All @@ -25,7 +24,6 @@
final class Email implements SerializableRuleInterface, BeforeValidationInterface
{
use BeforeValidationTrait;
use HandlerClassNameTrait;
use RuleNameTrait;

public function __construct(
Expand Down Expand Up @@ -162,4 +160,9 @@ public function getOptions(): array
'skipOnError' => $this->skipOnError,
];
}

public function getHandlerClassName(): string
{
return EmailHandler::class;
}
}
5 changes: 0 additions & 5 deletions src/Rule/Equal.php
Expand Up @@ -66,9 +66,4 @@ public function __construct(
when: $this->when
);
}

public function getHandlerClassName(): string
{
return CompareHandler::class;
}
}
5 changes: 0 additions & 5 deletions src/Rule/GreaterThan.php
Expand Up @@ -62,9 +62,4 @@ public function __construct(
when: $this->when
);
}

public function getHandlerClassName(): string
{
return CompareHandler::class;
}
}
5 changes: 0 additions & 5 deletions src/Rule/GreaterThanOrEqual.php
Expand Up @@ -62,9 +62,4 @@ public function __construct(
when: $this->when
);
}

public function getHandlerClassName(): string
{
return CompareHandler::class;
}
}

0 comments on commit 819311c

Please sign in to comment.