Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
7 / 7 |
CRAP | |
100.00% |
31 / 31 |
Money | |
100.00% |
1 / 1 |
|
100.00% |
7 / 7 |
9 | |
100.00% |
31 / 31 |
__construct($value, $currency = null, $precision = 2) | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
__toString() | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
getValue() | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getValueWithoutSeparation($precision = 2) | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
add(MoneyInterface $money) | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
multiply($multiplier) | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
checkValueValidity($value) | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
<?php | |
/** | |
* @author Krzysztof Gzocha <krzysztof.gzocha@xsolve.pl> | |
*/ | |
namespace Team3\PayU\Order\Model\Money; | |
use Symfony\Component\Validator\Constraints as Assert; | |
/** | |
* All money information will be stored and manipulated in this class. | |
* | |
* Class Money | |
* @package Team3\PayU\Order\Model\Money | |
*/ | |
class Money implements MoneyInterface | |
{ | |
/** | |
* @var double | |
* @Assert\GreaterThan(0) | |
*/ | |
protected $value; | |
/** | |
* @var string | |
* @Assert\Length(min="3", max="3") | |
*/ | |
protected $currency; | |
/** | |
* @var int | |
* @Assert\GreaterThan(0) | |
*/ | |
protected $precision; | |
/** | |
* @param double $value | |
* @param string $currency | |
* @param int $precision | |
* | |
* @throws WrongMoneyValueException | |
*/ | |
public function __construct($value, $currency = null, $precision = 2) | |
{ | |
$this->checkValueValidity($value); | |
$this->value = $value; | |
$this->currency = $currency; | |
$this->precision = $precision; | |
} | |
/** | |
* @return string | |
*/ | |
public function __toString() | |
{ | |
if (null === $this->currency) { | |
return (string) round($this->value, $this->precision); | |
} | |
return sprintf( | |
'%s %s', | |
round($this->value, $this->precision), | |
$this->currency | |
); | |
} | |
/** | |
* @inheritdoc | |
*/ | |
public function getValue() | |
{ | |
return (double) $this->value; | |
} | |
/** | |
* When precision is set to 2 this method will transforms 12.34 into 1234. | |
* @param int $precision | |
* | |
* @return int | |
*/ | |
public function getValueWithoutSeparation($precision = 2) | |
{ | |
return (int) sprintf('%d', ($this->getValue() * (double) pow(10, $precision))); | |
} | |
/** | |
* @param MoneyInterface $money | |
* | |
* @return MoneyInterface | |
*/ | |
public function add(MoneyInterface $money) | |
{ | |
return new self( | |
(double) ($this->getValue() + $money->getValue()), | |
$this->currency, | |
$this->precision | |
); | |
} | |
/** | |
* @param double $multiplier | |
* | |
* @return MoneyInterface | |
*/ | |
public function multiply($multiplier) | |
{ | |
return new self( | |
(double) ($this->getValue() * $multiplier), | |
$this->currency, | |
$this->precision | |
); | |
} | |
/** | |
* @param double $value | |
* | |
* @throws WrongMoneyValueException | |
*/ | |
protected function checkValueValidity($value) | |
{ | |
if (!is_numeric($value)) { | |
throw new WrongMoneyValueException(sprintf( | |
'Value passed to %s should be numeric, but is %s', | |
get_class($this), | |
gettype($value) | |
)); | |
} | |
} | |
} |