Passed
Push — master ( de3d61...be839c )
by Alec
13:42 queued 13s
created

IntervalNormalizerFactory   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
c 1
b 0
f 0
dl 0
loc 34
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getDivisor() 0 8 1
A create() 0 4 1
A buildIntegerNormalizer() 0 8 1
A __construct() 0 4 1
1
<?php
2
3
declare(strict_types=1);
4
5
6
namespace AlecRabbit\Spinner\Core\Factory;
7
8
use AlecRabbit\Spinner\Contract\Option\OptionNormalizerMode;
9
use AlecRabbit\Spinner\Core\Builder\Contract\IIntegerNormalizerBuilder;
10
use AlecRabbit\Spinner\Core\Contract\IIntegerNormalizer;
11
use AlecRabbit\Spinner\Core\Contract\IIntervalNormalizer;
12
use AlecRabbit\Spinner\Core\Factory\Contract\IIntervalNormalizerFactory;
13
use AlecRabbit\Spinner\Core\IntervalNormalizer;
14
15
final class IntervalNormalizerFactory implements IIntervalNormalizerFactory
16
{
17
    public function __construct(
18
        protected IIntegerNormalizerBuilder $integerNormalizerBuilder,
19
        protected OptionNormalizerMode $normalizerMode,
20
    ) {
21
    }
22
23
    public function create(): IIntervalNormalizer
24
    {
25
        return new IntervalNormalizer(
26
            $this->buildIntegerNormalizer(),
27
        );
28
    }
29
30
    private function buildIntegerNormalizer(): IIntegerNormalizer
31
    {
32
        $divisor = $this->getDivisor();
33
34
        return $this->integerNormalizerBuilder
35
            ->withDivisor($divisor)
36
            ->withMin($divisor)
37
            ->build()
38
        ;
39
    }
40
41
    private function getDivisor(): int
42
    {
43
        return match ($this->normalizerMode) {
44
            OptionNormalizerMode::SMOOTH => 20,
45
            OptionNormalizerMode::BALANCED => 50,
46
            OptionNormalizerMode::PERFORMANCE => 100,
47
            OptionNormalizerMode::SLOW => 1000,
48
            OptionNormalizerMode::STILL => 900000,
49
        };
50
    }
51
}
52