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

DriverLinkerFactory   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 24
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 9
c 0
b 0
f 0
dl 0
loc 24
rs 10
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getDriverLinker() 0 6 2
A __construct() 0 4 1
A createLinker() 0 6 1
1
<?php
2
3
declare(strict_types=1);
4
5
6
namespace AlecRabbit\Spinner\Core\Factory;
7
8
use AlecRabbit\Spinner\Core\Contract\IDriverLinker;
9
use AlecRabbit\Spinner\Core\Contract\ISettingsProvider;
10
use AlecRabbit\Spinner\Core\Contract\Loop\Contract\ILoop;
11
use AlecRabbit\Spinner\Core\DriverLinker;
12
use AlecRabbit\Spinner\Core\Factory\Contract\IDriverLinkerFactory;
13
14
final class DriverLinkerFactory implements IDriverLinkerFactory
15
{
16
    private static ?IDriverLinker $driverLinker = null;
17
18
    public function __construct(
19
        protected ILoop $loop,
20
        protected ISettingsProvider $settingsProvider,
21
    ) {
22
    }
23
24
    public function getDriverLinker(): IDriverLinker
25
    {
26
        if (self::$driverLinker === null) {
27
            self::$driverLinker = $this->createLinker();
28
        }
29
        return self::$driverLinker;
0 ignored issues
show
Bug Best Practice introduced by
The expression return self::driverLinker could return the type null which is incompatible with the type-hinted return AlecRabbit\Spinner\Core\Contract\IDriverLinker. Consider adding an additional type-check to rule them out.
Loading history...
30
    }
31
32
    private function createLinker(): IDriverLinker
33
    {
34
        return
35
            new DriverLinker(
36
                $this->loop,
37
                $this->settingsProvider->getDriverSettings()->getOptionLinker(),
38
            );
39
    }
40
}
41