|
|
|
@ -4,14 +4,11 @@
|
|
|
|
|
*/
|
|
|
|
|
namespace CommandLine\Argument\Parser;
|
|
|
|
|
|
|
|
|
|
use Fidit\v3\Exception\InvalidArgument;
|
|
|
|
|
use InvalidArgumentException;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Parseur vers un réel
|
|
|
|
|
*
|
|
|
|
|
* @property double|null $valueMin {@see $_valueMin $_valueMin}
|
|
|
|
|
* @property double|null $valueMax {@see $_valueMax $_valueMax}
|
|
|
|
|
*
|
|
|
|
|
* @package CommandLine\Argument\Parser
|
|
|
|
|
*/
|
|
|
|
|
class DecimalParser implements IValueParser {
|
|
|
|
@ -29,32 +26,36 @@ class DecimalParser implements IValueParser {
|
|
|
|
|
*
|
|
|
|
|
* @param double|null $valueMin La valeur minimum autorisée
|
|
|
|
|
* @param double|null $valueMax La valeur maximum autorisée
|
|
|
|
|
*
|
|
|
|
|
* @throws InvalidArgument Si l'un des paramètre est invalide.
|
|
|
|
|
*/
|
|
|
|
|
public function __construct ($valueMin = null, $valueMax = null) {
|
|
|
|
|
$this->setValueMin($valueMin);
|
|
|
|
|
$this->setValueMax($valueMax);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @inheritDoc
|
|
|
|
|
*/
|
|
|
|
|
public function parseValue ($arg) {
|
|
|
|
|
if (!$this->_isDecimal($arg))
|
|
|
|
|
throw new InvalidArgument($arg, 'La valeur n\'est pas un réel valide');
|
|
|
|
|
throw new InvalidArgumentException('La valeur n\'est pas un réel valide : ' . $arg);
|
|
|
|
|
|
|
|
|
|
$int = (int)$arg;
|
|
|
|
|
|
|
|
|
|
if ($this->hasValueMin()) {
|
|
|
|
|
if ($int < $this->getValueMin())
|
|
|
|
|
throw new InvalidArgument($int, 'La valeur est inférieure au minimum : ' . $this->getValueMin());
|
|
|
|
|
throw new InvalidArgumentException('La valeur est inférieure au minimum (' . $this->getValueMin().') : ' . $arg);
|
|
|
|
|
}
|
|
|
|
|
if ($this->hasValueMax()) {
|
|
|
|
|
if ($int > $this->getValueMax())
|
|
|
|
|
throw new InvalidArgument($int, 'La valeur est supérieur au maximum : ' . $this->getValueMax());
|
|
|
|
|
throw new InvalidArgumentException($int, 'La valeur est supérieur au maximum (' . $this->getValueMax() . ') : ' . $arg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $int;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @inheritDoc
|
|
|
|
|
*/
|
|
|
|
|
protected function _isDecimal($val) {
|
|
|
|
|
if(!is_numeric($val))
|
|
|
|
|
return false;
|
|
|
|
@ -62,6 +63,9 @@ class DecimalParser implements IValueParser {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @inheritDoc
|
|
|
|
|
*/
|
|
|
|
|
public function getValueDescription () {
|
|
|
|
|
return ($this->hasValueMin() ? $this->getValueMin().' <= ' : '').'decimal'.($this->hasValueMax() ? ' <= '.$this->getValueMax() : '');
|
|
|
|
|
}
|
|
|
|
@ -82,12 +86,10 @@ class DecimalParser implements IValueParser {
|
|
|
|
|
* @param double|null $valueMin La valeur minimum.
|
|
|
|
|
*
|
|
|
|
|
* @return $this
|
|
|
|
|
*
|
|
|
|
|
* @throws InvalidArgument Si la valeur minimum n'est ni null, ni un entier
|
|
|
|
|
*/
|
|
|
|
|
public function setValueMin($valueMin = null) {
|
|
|
|
|
if(!is_null($valueMin) && !$this->_isDecimal($valueMin))
|
|
|
|
|
throw new InvalidArgument($valueMin, 'La valeur n\'est pas un entier ou null');
|
|
|
|
|
throw new InvalidArgumentException('La valeur n\'est pas un entier ou null' . $valueMin);
|
|
|
|
|
|
|
|
|
|
$this->_valueMin = (int)$valueMin;
|
|
|
|
|
return $this;
|
|
|
|
@ -117,12 +119,10 @@ class DecimalParser implements IValueParser {
|
|
|
|
|
* @param double|null $valueMax La valeur maximum.
|
|
|
|
|
*
|
|
|
|
|
* @return $this
|
|
|
|
|
*
|
|
|
|
|
* @throws InvalidArgument Si la valeur maximum n'est ni null, ni un entier
|
|
|
|
|
*/
|
|
|
|
|
public function setValueMax($valueMax = null) {
|
|
|
|
|
if(!is_null($valueMax) && !$this->_isDecimal($valueMax))
|
|
|
|
|
throw new InvalidArgument($valueMax, 'La valeur n\'est pas un entier ou null');
|
|
|
|
|
throw new InvalidArgumentException('La valeur n\'est pas un entier ou null : ' . $valueMax);
|
|
|
|
|
|
|
|
|
|
$this->_valueMax = (int)$valueMax;
|
|
|
|
|
return $this;
|
|
|
|
|