diff --git a/composer.json b/composer.json index 0a623e0..d333b36 100644 --- a/composer.json +++ b/composer.json @@ -7,19 +7,19 @@ "config": { "sort-packages": true }, - "extra": { + "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "2.x-dev" } }, "minimum-stability": "stable", "require": { - "php": "^8.1", - "symfony/console": "^6.1", + "php": "^7.4 || ^8.0.0", + "symfony/console": "^5.4", "jrosset/betterphptoken": "^1.0", - "jrosset/collections": "^3.0", - "jrosset/extendedmonolog": "^2.0" + "jrosset/collections": "^2.3", + "jrosset/extendedmonolog": "^1.1" }, "autoload": { "psr-4": { diff --git a/src/CliProgram/Validation/TCommandWithValidation.php b/src/CliProgram/Validation/TCommandWithValidation.php index f4bfafd..f32bb12 100644 --- a/src/CliProgram/Validation/TCommandWithValidation.php +++ b/src/CliProgram/Validation/TCommandWithValidation.php @@ -2,7 +2,6 @@ namespace jrosset\CliProgram\Validation; -use Closure; use jrosset\CliProgram\Validation\Validators\InvalidValueException; use jrosset\CliProgram\Validation\Validators\IValidator; use Stringable; @@ -96,31 +95,24 @@ trait TCommandWithValidation { * @param mixed $default The default value (for InputArgument::OPTIONAL mode only) * @param string $description The argument description * @param IValidator|null $validator The validator or Null if none - * @param Closure|array|null $suggestedValues The function or list of suggested values when completing ; Null if none * * @return $this * * @throws InvalidArgumentException When argument mode is not valid */ public function addArgument ( - string $name, - int $mode = null, - string $description = '', - mixed $default = null, - ?IValidator $validator = null, - Closure|array|null $suggestedValues = null - ): static { + string $name, + int $mode = null, + string $description = '', + $default = null, + ?IValidator $validator = null + ): self { $default = static::treatStringableDefaultValue($default); if ($validator !== null) { $default = $validator->getValidDefault($default); } - if ($suggestedValues !== null) { - parent::addArgument($name, $mode, $description, $default, $suggestedValues); - } - else { - parent::addArgument($name, $mode, $description, $default); - } + parent::addArgument($name, $mode, $description, $default); return $this->setArgumentValidator($name, $validator); } /** @@ -133,7 +125,7 @@ trait TCommandWithValidation { * * @throws InvalidArgumentException If the {@see InputArgument} doesn't exist */ - public function setArgumentValidator (string $name, ?IValidator $validator): static { + public function setArgumentValidator (string $name, ?IValidator $validator): self { if (!$this->getDefinition()->hasArgument($name)) { throw new InvalidArgumentException(sprintf('The "%s" argument does not exist', $name)); } @@ -169,32 +161,25 @@ trait TCommandWithValidation { * @param string $description The argument description * @param mixed $default The default value (must be null for InputOption::VALUE_NONE) * @param IValidator|null $validator The validator or Null if none ; ignored if **$mode** = {@see InputOption::VALUE_NONE} - * @param Closure|array|null $suggestedValues The function or list of suggested values when completing ; Null if none * * @return $this * * @throws InvalidArgumentException When argument mode is not valid */ public function addOption ( - string $name, - string|array|null $shortcut = null, - int $mode = null, - string $description = '', - mixed $default = null, - ?IValidator $validator = null, - Closure|array|null $suggestedValues = null - ): static { + string $name, + $shortcut = null, + int $mode = null, + string $description = '', + $default = null, + ?IValidator $validator = null + ): self { $default = static::treatStringableDefaultValue($default); if ($validator !== null) { $default = $validator->getValidDefault($default); } - if ($suggestedValues !== null) { - parent::addOption($name, $shortcut, $mode, $description, $default, $suggestedValues); - } - else { - parent::addOption($name, $shortcut, $mode, $description, $default); - } + parent::addOption($name, $shortcut, $mode, $description, $default); return $this->setOptionValidator($name, $validator); } /** @@ -207,7 +192,7 @@ trait TCommandWithValidation { * * @throws InvalidArgumentException If the {@see InputOption} doesn't exist */ - public function setOptionValidator (string $name, ?IValidator $validator): static { + public function setOptionValidator (string $name, ?IValidator $validator): self { if (!$this->getDefinition()->hasOption($name)) { throw new InvalidArgumentException(sprintf('The "--%s" option does not exist', $name)); } @@ -241,7 +226,7 @@ trait TCommandWithValidation { * * @return mixed The default value */ - protected static function treatStringableDefaultValue (mixed $default): mixed { + protected static function treatStringableDefaultValue ($default) { if ($default instanceof Stringable) { return $default->__toString(); } diff --git a/src/CliProgram/Validation/Validators/AbstractDateTimeValidator.php b/src/CliProgram/Validation/Validators/AbstractDateTimeValidator.php index 7690ead..43f97ae 100644 --- a/src/CliProgram/Validation/Validators/AbstractDateTimeValidator.php +++ b/src/CliProgram/Validation/Validators/AbstractDateTimeValidator.php @@ -20,7 +20,7 @@ abstract class AbstractDateTimeValidator extends BasedValidator { /** * @inheritDoc */ - public function validate (mixed $value): bool { + public function validate ($value): bool { $this->getInternalValidator()->setPattern($this->getPattern()); return parent::validate($value); } diff --git a/src/CliProgram/Validation/Validators/BasedValidator.php b/src/CliProgram/Validation/Validators/BasedValidator.php index 8dcbe9d..e81fb1e 100644 --- a/src/CliProgram/Validation/Validators/BasedValidator.php +++ b/src/CliProgram/Validation/Validators/BasedValidator.php @@ -33,7 +33,7 @@ abstract class BasedValidator implements IValidator { /** * @inheritDoc */ - public function validate (mixed $value): bool { + public function validate ($value): bool { return $this->internalValidator->validate($value); } } \ No newline at end of file diff --git a/src/CliProgram/Validation/Validators/DateTimeValidator.php b/src/CliProgram/Validation/Validators/DateTimeValidator.php index 2dfa898..99202a8 100644 --- a/src/CliProgram/Validation/Validators/DateTimeValidator.php +++ b/src/CliProgram/Validation/Validators/DateTimeValidator.php @@ -29,7 +29,7 @@ class DateTimeValidator extends AbstractDateTimeValidator { /** * @inheritDoc */ - public function getValidDefault (mixed $default): string|bool|int|float|array { + public function getValidDefault ($default) { if ($default instanceof DateTimeInterface) { return $default->format('Y-m-d H:i:s'); } diff --git a/src/CliProgram/Validation/Validators/DateValidator.php b/src/CliProgram/Validation/Validators/DateValidator.php index 5f99892..4ec77d7 100644 --- a/src/CliProgram/Validation/Validators/DateValidator.php +++ b/src/CliProgram/Validation/Validators/DateValidator.php @@ -29,7 +29,7 @@ class DateValidator extends AbstractDateTimeValidator { /** * @inheritDoc */ - public function getValidDefault (mixed $default): string|bool|int|float|array { + public function getValidDefault ($default) { if ($default instanceof DateTimeInterface) { return $default->format('Y-m-d'); } diff --git a/src/CliProgram/Validation/Validators/DecimalValidator.php b/src/CliProgram/Validation/Validators/DecimalValidator.php index 13f8eef..ca678b5 100644 --- a/src/CliProgram/Validation/Validators/DecimalValidator.php +++ b/src/CliProgram/Validation/Validators/DecimalValidator.php @@ -56,7 +56,7 @@ class DecimalValidator extends BasedValidator { /** * @inheritDoc */ - public function validate (mixed $value): bool { + public function validate ($value): bool { if (!parent::validate($value)) { return false; } diff --git a/src/CliProgram/Validation/Validators/EnumValidator.php b/src/CliProgram/Validation/Validators/EnumValidator.php deleted file mode 100644 index 8974f35..0000000 --- a/src/CliProgram/Validation/Validators/EnumValidator.php +++ /dev/null @@ -1,62 +0,0 @@ - - * @template-implements TInternalValueValidator - */ -class EnumValidator extends BasedValidator { - /** - * @var ReflectionEnum The enumeration - */ - private ReflectionEnum $enum; - - /** - * Create a validator - * - * @param class-string $enumClass The enumeration class - * - * @throws ReflectionException If the enumeration class doesn't exist - */ - public function __construct (string $enumClass) { - $this->enum = new ReflectionEnum($enumClass); - - $enumCases = new Collection(); - foreach ($this->enum->getCases() as $enumCase) { - $enumCases->add($enumCase->getName()); - } - - parent::__construct(new ListValidator($enumCases)); - } - - /** - * @inheritDoc - * - * @throws ReflectionException - */ - public function getValidDefault (mixed $default): string|bool|int|float|array { - if ($default instanceof UnitEnum) { - $default = $default->name; - } - return $default; - } - - /** - * @inheritDoc - * - * @throws ReflectionException - */ - public function getValue (): UnitEnum { - $enumCase = $this->getInternalValidator()->getValue(); - return $this->enum->getCase($enumCase)->getValue(); - } -} \ No newline at end of file diff --git a/src/CliProgram/Validation/Validators/IValidator.php b/src/CliProgram/Validation/Validators/IValidator.php index 2190202..e27b361 100644 --- a/src/CliProgram/Validation/Validators/IValidator.php +++ b/src/CliProgram/Validation/Validators/IValidator.php @@ -15,7 +15,7 @@ interface IValidator { * * @return string|bool|int|float|array The valid default value */ - public function getValidDefault (mixed $default): string|bool|int|float|array; + public function getValidDefault ($default); /** * Validate a value @@ -24,7 +24,7 @@ interface IValidator { * * @return bool True if the value is valid, else False */ - public function validate (mixed $value): bool; + public function validate ($value): bool; /** * Get the value, after it's validation * diff --git a/src/CliProgram/Validation/Validators/IntegerValidator.php b/src/CliProgram/Validation/Validators/IntegerValidator.php index 51821cf..2d5a054 100644 --- a/src/CliProgram/Validation/Validators/IntegerValidator.php +++ b/src/CliProgram/Validation/Validators/IntegerValidator.php @@ -50,7 +50,7 @@ class IntegerValidator extends BasedValidator { /** * @inheritDoc */ - public function validate (mixed $value): bool { + public function validate ($value): bool { if (!parent::validate($value)) { return false; } diff --git a/src/CliProgram/Validation/Validators/ListValidator.php b/src/CliProgram/Validation/Validators/ListValidator.php index 8254897..e8a6df7 100644 --- a/src/CliProgram/Validation/Validators/ListValidator.php +++ b/src/CliProgram/Validation/Validators/ListValidator.php @@ -33,7 +33,7 @@ class ListValidator implements IValidator { /** * @inheritDoc */ - public function validate (mixed $value): bool { + public function validate ($value): bool { if ($this->getAllowedValues()->contains($value)) { $this->setValue($value); return true; diff --git a/src/CliProgram/Validation/Validators/RegexValidator.php b/src/CliProgram/Validation/Validators/RegexValidator.php index ec99856..f619f14 100644 --- a/src/CliProgram/Validation/Validators/RegexValidator.php +++ b/src/CliProgram/Validation/Validators/RegexValidator.php @@ -32,7 +32,7 @@ class RegexValidator implements IValidator { /** * @inheritDoc */ - public function validate (mixed $value): bool { + public function validate ($value): bool { return preg_match($this->pattern, $value, $this->matches) === 1; } @@ -71,7 +71,7 @@ class RegexValidator implements IValidator { * * @return string|null The capturing group or Null if not set */ - public function getMatch (int|string $group): ?string { + public function getMatch ($group): ?string { return $this->getMatches()[$group] ?? null; } /** @@ -81,7 +81,7 @@ class RegexValidator implements IValidator { * * @return bool True if the capturing group exists and is not null */ - public function hasMatch (int|string $group): bool { + public function hasMatch ($group): bool { return $this->getMatches()[$group] !== null; } diff --git a/src/CliProgram/Validation/Validators/TIdenticalValidDefaultValidator.php b/src/CliProgram/Validation/Validators/TIdenticalValidDefaultValidator.php index 8a159e8..35124a0 100644 --- a/src/CliProgram/Validation/Validators/TIdenticalValidDefaultValidator.php +++ b/src/CliProgram/Validation/Validators/TIdenticalValidDefaultValidator.php @@ -11,7 +11,7 @@ trait TIdenticalValidDefaultValidator { /** * @inheritDoc */ - public function getValidDefault (mixed $default): string|bool|int|float|array { + public function getValidDefault ($default) { return $default; } } \ No newline at end of file diff --git a/src/CliProgram/Validation/Validators/TInternalValueValidator.php b/src/CliProgram/Validation/Validators/TInternalValueValidator.php index 307ae95..1adc9d0 100644 --- a/src/CliProgram/Validation/Validators/TInternalValueValidator.php +++ b/src/CliProgram/Validation/Validators/TInternalValueValidator.php @@ -32,7 +32,7 @@ trait TInternalValueValidator { * * @return $this */ - protected function setValue ($value): static { + protected function setValue ($value): self { $this->value = $value; return $this; } diff --git a/src/CliProgram/Validation/Validators/TimeValidator.php b/src/CliProgram/Validation/Validators/TimeValidator.php index 43ed547..64a642a 100644 --- a/src/CliProgram/Validation/Validators/TimeValidator.php +++ b/src/CliProgram/Validation/Validators/TimeValidator.php @@ -29,7 +29,7 @@ class TimeValidator extends AbstractDateTimeValidator { /** * @inheritDoc */ - public function getValidDefault (mixed $default): string|bool|int|float|array { + public function getValidDefault ($default) { if ($default instanceof DateTimeInterface) { return $default->format('H:i:s'); } diff --git a/tests/Commands/Hello.php b/tests/Commands/Hello.php index 4129fad..08bbb24 100644 --- a/tests/Commands/Hello.php +++ b/tests/Commands/Hello.php @@ -7,9 +7,7 @@ use DateTimeInterface; use jrosset\CliProgram\Monolog\ConsoleOutputWithMonolog; use jrosset\CliProgram\Validation\CommandWithValidation; use jrosset\CliProgram\Validation\Validators\DateValidator; -use jrosset\CliProgram\Validation\Validators\EnumValidator; use jrosset\CliProgram\Validation\Validators\IntegerValidator; -use jrosset\Tests\Lang; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -42,14 +40,6 @@ class Hello extends CommandWithValidation { new DateValidator() ); - $this->addOption( - 'lang', - 'l', - InputArgument::OPTIONAL, - 'The lang', - Lang::English, - new EnumValidator(Lang::class) - ); $this->addOption( 'repeat', 'r', @@ -66,7 +56,7 @@ class Hello extends CommandWithValidation { protected function execute (InputInterface $input, OutputInterface $output): int { $output->writeln('Command : ' . __CLASS__, OutputInterface::VERBOSITY_DEBUG); - $text = $input->getOption('lang')->value; + $text = 'Hello'; $repeat = $input->getOption('repeat'); /** @var DateTimeInterface $day */ diff --git a/tests/Lang.php b/tests/Lang.php deleted file mode 100644 index 2c733e1..0000000 --- a/tests/Lang.php +++ /dev/null @@ -1,9 +0,0 @@ -