You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.0 KiB
PHP
75 lines
2.0 KiB
PHP
<?php
|
|
/**
|
|
* Déclaration de la classe CommandLine\Argument\Parser\EnumParser
|
|
*/
|
|
namespace CommandLine\Argument\Parser;
|
|
|
|
use Fidit\v3\Exception\InvalidArgument;
|
|
|
|
/**
|
|
* Parseur vers une liste de valeurs possible (chaine de caractère).
|
|
*
|
|
* @property string[] $values {@see $_values $_values}
|
|
*
|
|
* @package CommandLine\Argument\Parser
|
|
*/
|
|
class EnumParser implements IValueParser {
|
|
/**
|
|
* @var string[] Liste des valeurs autorisées
|
|
*/
|
|
protected $_values;
|
|
|
|
/**
|
|
* Crée un nouveau parseur.
|
|
*
|
|
* @param string[] $values La liste des valeurs autorisées.
|
|
*
|
|
* @throws InvalidArgument Si l'un des paramètres n'est pas correct
|
|
*/
|
|
public function __construct ($values) {
|
|
$this->setValues($values);
|
|
}
|
|
|
|
public function parseValue ($arg) {
|
|
if(!in_array($arg, $this->_values))
|
|
throw new InvalidArgument($arg, 'La valeur ne fait partie de liste des valeurs autorisées : '.implode(', ', $this->getValues()));
|
|
|
|
return $arg;
|
|
}
|
|
|
|
public function getValueDescription () {
|
|
return 'enum('.implode(',', $this->getValues()).')';
|
|
}
|
|
|
|
/**
|
|
* La liste des valeurs autoriséees.
|
|
*
|
|
* @return string[] La liste des valeurs
|
|
*
|
|
* @see $_values
|
|
*/
|
|
public function getValues() {
|
|
return $this->_values;
|
|
}
|
|
/**
|
|
* Définit la liste des valeurs autorisées.
|
|
*
|
|
* @param string[] $values La liste des valeurs
|
|
*
|
|
* @return $this
|
|
*
|
|
* @throws InvalidArgument Si la liste n'est pas un tableau ou si celui-ci est vide
|
|
*
|
|
* @see $_values
|
|
*/
|
|
public function setValues($values) {
|
|
if(!is_array($values))
|
|
throw new InvalidArgument($values, 'La liste de valeurs n\'est pas un tableau');
|
|
|
|
if(count($values) == 0)
|
|
throw new InvalidArgument($values, 'La liste de valeurs doit avoir au moins un élément');
|
|
|
|
$this->_values = $values;
|
|
return $this;
|
|
}
|
|
} |