Skip to content

Commit 819311c

Browse files
authored
Fix #264: Remove GroupRule in favor of Composite (#267)
1 parent 89f940c commit 819311c

35 files changed

Lines changed: 125 additions & 343 deletions

README.md

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ Library could be used in two ways: validating a single value and validating a se
4747

4848
```php
4949
use Yiisoft\Validator\ValidatorInterface;
50-
use Yiisoft\Validator\RuleSet;
5150
use Yiisoft\Validator\Rule\Required;
5251
use Yiisoft\Validator\Rule\Number;
5352
use Yiisoft\Validator\Result;
@@ -223,7 +222,6 @@ use Yiisoft\Validator\ValidatorInterface;
223222
use Yiisoft\Validator\Rule\Count;
224223
use Yiisoft\Validator\Rule\Each;
225224
use Yiisoft\Validator\Rule\Nested;
226-
use Yiisoft\Validator\RuleSet;
227225

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

374372
```php
375373
use Attribute;
376-
use \Yiisoft\Validator\Exception\UnexpectedRuleException;
374+
use Yiisoft\Validator\Exception\UnexpectedRuleException;
377375
use Yiisoft\Validator\Result;
378376
use Yiisoft\Validator\Rule\Number;
379377
use Yiisoft\Validator\RuleHandlerInterface;
380-
use \Yiisoft\Validator\RuleInterface;
378+
use Yiisoft\Validator\RuleInterface;
381379
use Yiisoft\Validator\ValidationContext;
382380

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

458456
use Attribute;
459457
use Yiisoft\Validator\Rule\Each;
460-
use Yiisoft\Validator\Rule\GroupRule;
458+
use Yiisoft\Validator\Rule\Composite;
461459

462460
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
463-
final class RgbRule extends GroupRule
461+
final class RgbRule extends Composite
464462
{
465-
public function getRuleSet(): array
463+
public function getRules(): array
466464
{
467465
return [
468466
new Each([
@@ -754,19 +752,18 @@ final class Coordinate implements RuleInterface
754752
To reuse multiple validation rules it is advised to group rules like the following:
755753

756754
```php
757-
use Yiisoft\Validator\RuleSet;
758755
use Yiisoft\Validator\Rule\HasLength;
759756
use Yiisoft\Validator\Rule\Regex;
760-
use \Yiisoft\Validator\Rule\GroupRule;
757+
use \Yiisoft\Validator\Rule\Composite;
761758

762-
final class UsernameRule extends GroupRule
759+
final class UsernameRule extends Composite
763760
{
764-
public function getRuleSet(): RuleSet
761+
public function getRules(): array
765762
{
766-
return new RuleSet([
763+
return [
767764
new HasLength(min: 2, max: 20),
768765
new Regex('~[a-z_\-]~i'),
769-
]);
766+
];
770767
}
771768
}
772769
```

src/Attribute/Embedded.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,29 @@
88
use Closure;
99
use ReflectionAttribute;
1010
use ReflectionClass;
11-
use Yiisoft\Validator\Rule\GroupRule;
11+
use Yiisoft\Validator\Rule\Composite;
1212
use Yiisoft\Validator\RuleInterface;
1313
use Yiisoft\Validator\ValidationContext;
1414

1515
/**
1616
* Collects all attributes from the reference and represents it as its own.
1717
*/
1818
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
19-
final class Embedded extends GroupRule
19+
final class Embedded extends Composite
2020
{
2121
/**
2222
* @psalm-param Closure(mixed, ValidationContext):bool|null $when
2323
*/
2424
public function __construct(
2525
private string $referenceClassName,
26-
string $message = 'This value is not a valid.',
2726
bool $skipOnEmpty = false,
2827
bool $skipOnError = false,
2928
?Closure $when = null,
3029
) {
31-
parent::__construct($message, $skipOnEmpty, $skipOnError, $when);
30+
parent::__construct([], $skipOnEmpty, $skipOnError, $when);
3231
}
3332

34-
public function getRuleSet(): array
33+
public function getRules(): array
3534
{
3635
$classMeta = new ReflectionClass($this->referenceClassName);
3736

src/Rule/AtLeast.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use JetBrains\PhpStorm\ArrayShape;
1010
use Yiisoft\Validator\SerializableRuleInterface;
1111
use Yiisoft\Validator\BeforeValidationInterface;
12-
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
1312
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
1413
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
1514
use Yiisoft\Validator\ValidationContext;
@@ -21,7 +20,6 @@
2120
final class AtLeast implements SerializableRuleInterface, BeforeValidationInterface
2221
{
2322
use BeforeValidationTrait;
24-
use HandlerClassNameTrait;
2523
use RuleNameTrait;
2624

2725
public function __construct(
@@ -88,4 +86,9 @@ public function getOptions(): array
8886
'skipOnError' => $this->skipOnError,
8987
];
9088
}
89+
90+
public function getHandlerClassName(): string
91+
{
92+
return AtLeastHandler::class;
93+
}
9194
}

src/Rule/Boolean.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use JetBrains\PhpStorm\ArrayShape;
1010
use Yiisoft\Validator\SerializableRuleInterface;
1111
use Yiisoft\Validator\BeforeValidationInterface;
12-
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
1312
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
1413
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
1514
use Yiisoft\Validator\ValidationContext;
@@ -21,7 +20,6 @@
2120
final class Boolean implements SerializableRuleInterface, BeforeValidationInterface
2221
{
2322
use BeforeValidationTrait;
24-
use HandlerClassNameTrait;
2523
use RuleNameTrait;
2624

2725
public function __construct(
@@ -106,4 +104,9 @@ public function getOptions(): array
106104
'skipOnError' => $this->skipOnError,
107105
];
108106
}
107+
108+
public function getHandlerClassName(): string
109+
{
110+
return BooleanHandler::class;
111+
}
109112
}

src/Rule/Callback.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@
88
use JetBrains\PhpStorm\ArrayShape;
99
use Yiisoft\Validator\SerializableRuleInterface;
1010
use Yiisoft\Validator\BeforeValidationInterface;
11-
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
1211
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
1312
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
1413
use Yiisoft\Validator\ValidationContext;
1514

1615
final class Callback implements SerializableRuleInterface, BeforeValidationInterface
1716
{
1817
use BeforeValidationTrait;
19-
use HandlerClassNameTrait;
2018
use RuleNameTrait;
2119

2220
public function __construct(
@@ -49,4 +47,9 @@ public function getOptions(): array
4947
'skipOnError' => $this->skipOnError,
5048
];
5149
}
50+
51+
public function getHandlerClassName(): string
52+
{
53+
return CallbackHandler::class;
54+
}
5255
}

src/Rule/Compare.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,12 @@
1111
use Yiisoft\Validator\BeforeValidationInterface;
1212
use Yiisoft\Validator\SerializableRuleInterface;
1313
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
14-
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
1514
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
1615
use Yiisoft\Validator\ValidationContext;
1716

1817
abstract class Compare implements SerializableRuleInterface, BeforeValidationInterface
1918
{
2019
use BeforeValidationTrait;
21-
use HandlerClassNameTrait;
2220
use RuleNameTrait;
2321

2422
/**
@@ -157,4 +155,9 @@ public function getOptions(): array
157155
'skipOnError' => $this->skipOnError,
158156
];
159157
}
158+
159+
public function getHandlerClassName(): string
160+
{
161+
return CompareHandler::class;
162+
}
160163
}

src/Rule/Composite.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use Yiisoft\Validator\BeforeValidationInterface;
1010
use Yiisoft\Validator\SerializableRuleInterface;
1111
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
12-
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
1312
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
1413
use Yiisoft\Validator\RuleInterface;
1514
use Yiisoft\Validator\ValidationContext;
@@ -18,10 +17,9 @@
1817
* Validates that the value is a valid json.
1918
*/
2019
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
21-
final class Composite implements SerializableRuleInterface, BeforeValidationInterface
20+
class Composite implements SerializableRuleInterface, BeforeValidationInterface
2221
{
2322
use BeforeValidationTrait;
24-
use HandlerClassNameTrait;
2523
use RuleNameTrait;
2624

2725
public function __construct(
@@ -58,4 +56,9 @@ public function getRules(): iterable
5856
{
5957
return $this->rules;
6058
}
59+
60+
public function getHandlerClassName(): string
61+
{
62+
return CompositeHandler::class;
63+
}
6164
}

src/Rule/Count.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
use JetBrains\PhpStorm\ArrayShape;
1212
use Yiisoft\Validator\SerializableRuleInterface;
1313
use Yiisoft\Validator\BeforeValidationInterface;
14-
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
1514
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
1615
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
1716
use Yiisoft\Validator\ValidationContext;
@@ -24,7 +23,6 @@
2423
final class Count implements SerializableRuleInterface, BeforeValidationInterface
2524
{
2625
use BeforeValidationTrait;
27-
use HandlerClassNameTrait;
2826
use RuleNameTrait;
2927

3028
public function __construct(
@@ -181,4 +179,9 @@ public function getOptions(): array
181179
'skipOnError' => $this->skipOnError,
182180
];
183181
}
182+
183+
public function getHandlerClassName(): string
184+
{
185+
return CountHandler::class;
186+
}
184187
}

src/Rule/Each.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use Closure;
99
use Yiisoft\Validator\SerializableRuleInterface;
1010
use Yiisoft\Validator\BeforeValidationInterface;
11-
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
1211
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
1312
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
1413
use Yiisoft\Validator\RuleInterface;
@@ -21,7 +20,6 @@
2120
final class Each implements SerializableRuleInterface, BeforeValidationInterface
2221
{
2322
use BeforeValidationTrait;
24-
use HandlerClassNameTrait;
2523
use RuleNameTrait;
2624

2725
public function __construct(
@@ -76,4 +74,9 @@ public function getOptions(): array
7674
}
7775
return $arrayOfRules;
7876
}
77+
78+
public function getHandlerClassName(): string
79+
{
80+
return EachHandler::class;
81+
}
7982
}

src/Rule/Email.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use RuntimeException;
1111
use Yiisoft\Validator\SerializableRuleInterface;
1212
use Yiisoft\Validator\BeforeValidationInterface;
13-
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
1413
use Yiisoft\Validator\Rule\Trait\BeforeValidationTrait;
1514
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
1615

@@ -25,7 +24,6 @@
2524
final class Email implements SerializableRuleInterface, BeforeValidationInterface
2625
{
2726
use BeforeValidationTrait;
28-
use HandlerClassNameTrait;
2927
use RuleNameTrait;
3028

3129
public function __construct(
@@ -162,4 +160,9 @@ public function getOptions(): array
162160
'skipOnError' => $this->skipOnError,
163161
];
164162
}
163+
164+
public function getHandlerClassName(): string
165+
{
166+
return EmailHandler::class;
167+
}
165168
}

0 commit comments

Comments
 (0)