Skip to content

Commit

Permalink
Merge pull request #136 from utopia-php/feat-multiple-validator-adapter
Browse files Browse the repository at this point in the history
Feat: Rules for Multiple validator
  • Loading branch information
eldadfux authored Jul 2, 2024
2 parents ae3bdee + 726540d commit e3bbca0
Show file tree
Hide file tree
Showing 7 changed files with 469 additions and 295 deletions.
292 changes: 147 additions & 145 deletions composer.lock

Large diffs are not rendered by default.

86 changes: 86 additions & 0 deletions src/Http/Validator/AllOf.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<?php

namespace Utopia\Http\Validator;

use Utopia\Http\Validator;

/**
* Ensure all of the validators from a list passed the check
*
* @package Utopia\Validator
*/
class AllOf extends Validator
{
protected ?Validator $failedRule = null;

/**
* @param array<Validator> $validators
*/
public function __construct(protected array $validators, protected string $type = self::TYPE_MIXED)
{
}

/**
* Get Description
*
* Returns validator description
*
* @return string
*/
public function getDescription(): string
{
if(!(\is_null($this->failedRule))) {
$description = $this->failedRule->getDescription();
} else {
$description = $this->validators[0]->getDescription();
}

return $description;
}

/**
* Is valid
*
* Validation will pass when all rules are valid if only one of the rules is invalid validation will fail.
*
* @param mixed $value
* @return bool
*/
public function isValid(mixed $value): bool
{
foreach ($this->validators as $rule) {
$valid = $rule->isValid($value);

if(!$valid) {
$this->failedRule = $rule;
return false;
}
}

return true;
}

/**
* Get Type
*
* Returns validator type.
*
* @return string
*/
public function getType(): string
{
return $this->type;
}

/**
* Is array
*
* Function will return true if object is array.
*
* @return bool
*/
public function isArray(): bool
{
return true;
}
}
87 changes: 87 additions & 0 deletions src/Http/Validator/AnyOf.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<?php

namespace Utopia\Http\Validator;

use Utopia\Http\Validator;

/**
* Ensure at least one validator from a list passed the check
*
* @package Utopia\Validator
*/
class AnyOf extends Validator
{
protected ?Validator $failedRule = null;

/**
* @param array<Validator> $validators
*/
public function __construct(protected array $validators, protected string $type = self::TYPE_MIXED)
{
}

/**
* Get Description
*
* Returns validator description
*
* @return string
*/
public function getDescription(): string
{
if(!(\is_null($this->failedRule))) {
$description = $this->failedRule->getDescription();
} else {
$description = $this->validators[0]->getDescription();
}

return $description;
}

/**
* Is valid
*
* Validation will pass when all rules are valid if only one of the rules is invalid validation will fail.
*
* @param mixed $value
* @return bool
*/
public function isValid(mixed $value): bool
{
foreach ($this->validators as $rule) {
$valid = $rule->isValid($value);

$this->failedRule = $rule;

if($valid) {
return true;
}
}

return false;
}

/**
* Get Type
*
* Returns validator type.
*
* @return string
*/
public function getType(): string
{
return $this->type;
}

/**
* Is array
*
* Function will return true if object is array.
*
* @return bool
*/
public function isArray(): bool
{
return true;
}
}
115 changes: 0 additions & 115 deletions src/Http/Validator/Multiple.php

This file was deleted.

88 changes: 88 additions & 0 deletions src/Http/Validator/NoneOf.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<?php

namespace Utopia\Http\Validator;

use Utopia\Http\Validator;

/**
* Ensure no validators from a list passed the check
*
* @package Utopia\Validator
*/
class NoneOf extends Validator
{
protected ?Validator $failedRule = null;

/**
* @param array<Validator> $validators
*/
public function __construct(protected array $validators, protected string $type = self::TYPE_MIXED)
{
}

/**
* Get Description
*
* Returns validator description
*
* @return string
*/
public function getDescription(): string
{
$description = '';

if(!(\is_null($this->failedRule))) {
$description = $this->failedRule->getDescription();
} else {
$description = $this->validators[0]->getDescription();
}

return $description;
}

/**
* Is valid
*
* Validation will pass when all rules are valid if only one of the rules is invalid validation will fail.
*
* @param mixed $value
* @return bool
*/
public function isValid(mixed $value): bool
{
foreach ($this->validators as $rule) {
$valid = $rule->isValid($value);

if($valid) {
$this->failedRule = $rule;
return false;
}
}

return true;
}

/**
* Get Type
*
* Returns validator type.
*
* @return string
*/
public function getType(): string
{
return $this->type;
}

/**
* Is array
*
* Function will return true if object is array.
*
* @return bool
*/
public function isArray(): bool
{
return true;
}
}
Loading

0 comments on commit e3bbca0

Please sign in to comment.