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
1.8 KiB
PHP
75 lines
1.8 KiB
PHP
<?php
|
|
/**
|
|
* Déclaration de la classe CommandLine\Argument\Parser\EnumParser
|
|
*/
|
|
namespace CommandLine\Argument\Parser;
|
|
|
|
use InvalidArgumentException;
|
|
use RangeException;
|
|
|
|
/**
|
|
* Parseur vers une liste de valeurs possible (chaine de caractère).
|
|
*
|
|
* @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
|
|
*/
|
|
public function __construct ($values) {
|
|
$this->setValues($values);
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function parseValue ($arg) {
|
|
if(!in_array($arg, $this->_values))
|
|
throw new RangeException('La valeur ne fait partie de liste des valeurs autorisées (' . implode(', ', $this->getValues()) . ') : ' . $arg);
|
|
|
|
return $arg;
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
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
|
|
* @see $_values
|
|
*/
|
|
public function setValues($values) {
|
|
if(!is_array($values))
|
|
throw new InvalidArgumentException('La liste de valeurs n\'est pas un tableau');
|
|
|
|
if(count($values) == 0)
|
|
throw new InvalidArgumentException('La liste de valeurs doit avoir au moins un élément');
|
|
|
|
$this->_values = $values;
|
|
return $this;
|
|
}
|
|
} |