Total Complexity | 12 |
Total Lines | 97 |
Duplicated Lines | 0 % |
Coverage | 100% |
Changes | 0 |
1 | <?php |
||
11 | class Assets |
||
12 | { |
||
13 | /** @var Asset[] */ |
||
14 | private $assets = []; |
||
15 | |||
16 | /** |
||
17 | * Assets constructor. |
||
18 | * @param Asset ...$assets |
||
19 | */ |
||
20 | 16 | public function __construct(Asset ...$assets) |
|
21 | { |
||
22 | 16 | foreach ($assets as $newAsset) { |
|
23 | 16 | $this->add($newAsset); |
|
24 | } |
||
25 | 16 | } |
|
26 | |||
27 | /** |
||
28 | * @param Asset $money |
||
29 | * @return Asset |
||
30 | */ |
||
31 | 16 | public function add(Asset $money): Asset |
|
32 | { |
||
33 | return |
||
34 | 16 | ($asset = $this->assetOf($money))->isZero() ? |
|
35 | 16 | $this->setAsset($money) : |
|
36 | 16 | $this->setAsset($asset->add($money)); |
|
37 | } |
||
38 | |||
39 | /** |
||
40 | * @param Asset $money |
||
41 | * @return Asset |
||
42 | */ |
||
43 | 16 | private function assetOf(Asset $money): Asset |
|
44 | { |
||
45 | 16 | return $this->getAsset($money->getCurrency()); |
|
46 | } |
||
47 | |||
48 | /** |
||
49 | * @param \AlecRabbit\Currency\Currency $currency |
||
50 | * @return Asset |
||
51 | */ |
||
52 | 16 | public function getAsset(Currency $currency): Asset |
|
53 | { |
||
54 | return |
||
55 | 16 | $this->assets[(string)$currency] ?? $this->setAsset(new Asset(0, $currency)); |
|
56 | } |
||
57 | |||
58 | /** |
||
59 | * @param Asset $money |
||
60 | * @return Asset |
||
61 | */ |
||
62 | 16 | private function setAsset(Asset $money): Asset |
|
66 | } |
||
67 | |||
68 | /** |
||
69 | * @param Asset $money |
||
70 | * @return bool |
||
71 | */ |
||
72 | 11 | public function have(Asset $money): bool |
|
73 | { |
||
74 | return |
||
75 | 11 | $money->subtract($this->assetOf($money))->isNotPositive(); |
|
76 | } |
||
77 | |||
78 | /** |
||
79 | * @param Asset $money |
||
80 | * @return Asset |
||
81 | */ |
||
82 | 1 | public function take(Asset $money): Asset |
|
89 | } |
||
90 | |||
91 | /** |
||
92 | * @param Asset $money |
||
93 | * @return Asset |
||
94 | */ |
||
95 | 2 | public function subtract(Asset $money): Asset |
|
99 | } |
||
100 | |||
101 | /** |
||
102 | * @return iterable |
||
103 | */ |
||
104 | 1 | public function getCurrencies(): iterable |
|
108 | } |
||
109 | } |
||
110 |