Completed
Push — master ( ac62eb...633109 )
by Dawid
03:39
created

DecimalNumber   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
dl 0
loc 29
ccs 14
cts 14
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getDefaultAttributes() 0 5 1
A hydrate() 0 3 1
A formatDecimalNumber() 0 9 2
A extract() 0 3 1
1
<?php declare(strict_types=1);
2
3
namespace Igni\Storage\Mapping\Strategy;
4
5
use Igni\Storage\Mapping\MappingStrategy;
6
use Igni\Utils\ReflectionApi\RuntimeMethod;
7
8
final class DecimalNumber implements MappingStrategy, DefaultAttributesProvider
9
{
10 3
    public static function hydrate(&$value, array $attributes = []): void
11
    {
12 3
        $value = self::formatDecimalNumber((string) $value, $attributes);
13 3
    }
14
15 2
    public static function extract(&$value, array $attributes = []): void
16
    {
17 2
        $value = self::formatDecimalNumber((string) $value, $attributes);
18 2
    }
19
20 4
    public static function getDefaultAttributes(): array
21
    {
22
        return [
23 4
            'scale' => 10,
24
            'precision' => 2,
25
        ];
26
    }
27
28 5
    private static function formatDecimalNumber(string $number, array $attributes): string
29
    {
30 5
        $parts = explode('.', $number);
31 5
        if (strlen($parts[0]) > $attributes['scale']) {
32 1
            $parts[0] = str_repeat('9', $attributes['scale']);
33
        }
34 5
        $number = $parts[0] . '.' . ($parts[1] ?? '');
35
36 5
        return bcadd($number, '0', $attributes['precision']);
37
    }
38
}
39