Skip to content

Commit

Permalink
Update the validation engine of envelop-based rules
Browse files Browse the repository at this point in the history
Signed-off-by: Henrique Moody <[email protected]>
  • Loading branch information
henriquemoody committed Feb 22, 2024
1 parent 0e87d1f commit e341fef
Show file tree
Hide file tree
Showing 17 changed files with 51 additions and 71 deletions.
45 changes: 0 additions & 45 deletions library/Rules/AbstractEnvelope.php

This file was deleted.

2 changes: 1 addition & 1 deletion library/Rules/Between.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
'{{name}} must be between {{minValue}} and {{maxValue}}',
'{{name}} must not be between {{minValue}} and {{maxValue}}',
)]
final class Between extends AbstractEnvelope
final class Between extends Envelope
{
use CanCompareValues;

Expand Down
2 changes: 1 addition & 1 deletion library/Rules/ContainsAny.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
'{{name}} must contain at least one of the values {{needles}}',
'{{name}} must not contain any of the values {{needles}}',
)]
final class ContainsAny extends AbstractEnvelope
final class ContainsAny extends Envelope
{
/**
* @param mixed[] $needles At least one of the values provided must be found in input string or array
Expand Down
29 changes: 29 additions & 0 deletions library/Rules/Envelope.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

/*
* Copyright (c) Alexandre Gomes Gaigalas <[email protected]>
* SPDX-License-Identifier: MIT
*/

declare(strict_types=1);

namespace Respect\Validation\Rules;

use Respect\Validation\Result;
use Respect\Validation\Validatable;

abstract class Envelope extends Standard
{
/** @param array<string, mixed> $parameters */
public function __construct(
private readonly Validatable $rule,
private readonly array $parameters = []
) {
}

public function evaluate(mixed $input): Result
{
return (new Result($this->rule->evaluate($input)->isValid, $input, $this))
->withParameters($this->parameters);
}
}
2 changes: 1 addition & 1 deletion library/Rules/FilterVar.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
'{{name}} must be valid',
'{{name}} must not be valid',
)]
final class FilterVar extends AbstractEnvelope
final class FilterVar extends Envelope
{
private const ALLOWED_FILTERS = [
FILTER_VALIDATE_BOOLEAN => 'is_bool',
Expand Down
2 changes: 1 addition & 1 deletion library/Rules/HexRgbColor.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
'{{name}} must be a hex RGB color',
'{{name}} must not be a hex RGB color',
)]
final class HexRgbColor extends AbstractEnvelope
final class HexRgbColor extends Envelope
{
public function __construct()
{
Expand Down
2 changes: 1 addition & 1 deletion library/Rules/LanguageCode.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
'{{name}} must be a valid ISO 639 {{set|raw}} language code',
'{{name}} must not be a valid ISO 639 {{set|raw}} language code',
)]
final class LanguageCode extends AbstractEnvelope
final class LanguageCode extends Envelope
{
public const ALPHA2 = 'alpha-2';
public const ALPHA3 = 'alpha-3';
Expand Down
2 changes: 1 addition & 1 deletion library/Rules/No.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
'{{name}} must be similar to "No"',
'{{name}} must not be similar to "No"',
)]
final class No extends AbstractEnvelope
final class No extends Envelope
{
public function __construct(bool $useLocale = false)
{
Expand Down
2 changes: 1 addition & 1 deletion library/Rules/PostalCode.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
'{{name}} must be a valid postal code on {{countryCode}}',
'{{name}} must not be a valid postal code on {{countryCode}}',
)]
final class PostalCode extends AbstractEnvelope
final class PostalCode extends Envelope
{
private const DEFAULT_PATTERN = '/^$/';

Expand Down
2 changes: 1 addition & 1 deletion library/Rules/Roman.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
'{{name}} must be a valid Roman numeral',
'{{name}} must not be a valid Roman numeral',
)]
final class Roman extends AbstractEnvelope
final class Roman extends Envelope
{
public function __construct()
{
Expand Down
2 changes: 1 addition & 1 deletion library/Rules/Url.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
'{{name}} must be a URL',
'{{name}} must not be a URL',
)]
final class Url extends AbstractEnvelope
final class Url extends Envelope
{
public function __construct()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

namespace Respect\Validation\Test\Rules;

use Respect\Validation\Rules\AbstractEnvelope;
use Respect\Validation\Rules\Envelope;

final class Envelop extends AbstractEnvelope
final class EnvelopStub extends Envelope
{
}
1 change: 0 additions & 1 deletion tests/unit/Rules/BetweenTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
use Respect\Validation\Test\Stubs\CountableStub;

#[Group('rule')]
#[CoversClass(AbstractEnvelope::class)]
#[CoversClass(Between::class)]
final class BetweenTest extends RuleTestCase
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,41 +12,41 @@
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\Test;
use Respect\Validation\Test\Rules\Envelop;
use Respect\Validation\Test\Rules\EnvelopStub;
use Respect\Validation\Test\Rules\Stub;
use Respect\Validation\Test\TestCase;

use function array_intersect_key;

#[Group('core')]
#[CoversClass(AbstractEnvelope::class)]
final class AbstractEnvelopeTest extends TestCase
#[CoversClass(Envelope::class)]
final class EnvelopeTest extends TestCase
{
#[Test]
public function itShouldValidateUsingTheInnerRule(): void
{
$rule = new Envelop(Stub::pass(1), []);
$rule = new EnvelopStub(Stub::pass(1), []);

self::assertTrue($rule->validate('something'));
self::assertTrue($rule->evaluate('something')->isValid);
}

#[Test]
public function itShouldInvalidateUsingTheInnerRule(): void
{
$rule = new Envelop(Stub::fail(1), []);
$rule = new EnvelopStub(Stub::fail(1), []);

self::assertFalse($rule->validate('something'));
self::assertFalse($rule->evaluate('something')->isValid);
}

#[Test]
public function itShouldReportErrorUsingProperties(): void
public function itShouldEvaluatePassingTheGivenProperties(): void
{
$input = 'value';
$parameters = ['foo' => true, 'bar' => false, 'baz' => 42];

$rule = new Envelop(Stub::fail(1), $parameters);
$exception = $rule->reportError($input);
$rule = new EnvelopStub(Stub::fail(1), $parameters);
$result = $rule->evaluate($input);

self::assertEquals($parameters, array_intersect_key($parameters, $exception->getParams()));
self::assertEquals($parameters, array_intersect_key($parameters, $result->parameters));
}
}
1 change: 0 additions & 1 deletion tests/unit/Rules/FilterVarTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
use const FILTER_VALIDATE_URL;

#[Group('rule')]
#[CoversClass(AbstractEnvelope::class)]
#[CoversClass(FilterVar::class)]
final class FilterVarTest extends RuleTestCase
{
Expand Down
1 change: 0 additions & 1 deletion tests/unit/Rules/LanguageCodeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
use Respect\Validation\Test\RuleTestCase;

#[Group('rule')]
#[CoversClass(AbstractEnvelope::class)]
#[CoversClass(LanguageCode::class)]
final class LanguageCodeTest extends RuleTestCase
{
Expand Down
1 change: 0 additions & 1 deletion tests/unit/Rules/UrlTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
use Respect\Validation\Test\RuleTestCase;

#[Group('rule')]
#[CoversClass(AbstractEnvelope::class)]
#[CoversClass(Url::class)]
final class UrlTest extends RuleTestCase
{
Expand Down

0 comments on commit e341fef

Please sign in to comment.