11
0
Fork 0
mirror of https://github.com/n3w/helpers-cli-input.git synced 2025-12-19 12:43:23 +00:00
helpers-cli-input/src/Input/Validator.php
Alannah Kearney 0620d00f08 Initial commit
2019-05-20 15:08:41 +10:00

38 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
namespace pointybeard\Helpers\Cli\Input;
class Validator implements Interfaces\InputValidatorInterface
{
private $func;
public function __construct(\Closure $func)
{
// Check the closure used for validation meets requirements
$params = (new \ReflectionFunction($func))->getParameters();
// Must have exactly 2 params
if (2 != count($params)) {
throw new \Exception('Closure passed to Validator::__construct() is invalid: Must have exactly 2 parameters.');
}
// First must be 'input' and be of type pointybeard\Helpers\Cli\Input\AbstractInputType
if ('input' != $params[0]->getName() || __NAMESPACE__.'\AbstractInputType' != (string) $params[0]->getType()) {
throw new \Exception('Closure passed to Validator::__construct() is invalid: First parameter must match '.__NAMESPACE__."\AbstractInputType \$input. Provided with ".(string) $params[0]->getType()." \${$params[0]->getName()}");
}
// Second must be 'context' and be of type pointybeard\Helpers\Cli\Input\AbstractInputHandler
if ('context' != $params[1]->getName() || __NAMESPACE__.'\AbstractInputHandler' != (string) $params[1]->getType()) {
throw new \Exception('Closure passed to Validator::__construct() is invalid: Second parameter must match '.__NAMESPACE__."\AbstractInputHandler \$context. Provided with ".(string) $params[1]->getType()." \${$params[1]->getName()}");
}
$this->func = $func;
}
public function validate(AbstractInputType $input, AbstractInputHandler $context)
{
return ($this->func)($input, $context);
}
}