Completed
Pull Request — master (#6)
by Alberto
04:09
created

ProxyBuilderFactory   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 2
dl 0
loc 46
ccs 12
cts 12
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A get() 0 9 3
A key() 0 4 1
A build() 0 4 1
A reset() 0 6 2
1
<?php
2
declare(strict_types=1);
3
4
namespace Moka\Factory;
5
6
use Moka\Builder\ProxyBuilder;
7
use Moka\Strategy\MockingStrategyInterface;
8
9
/**
10
 * Class ProxyBuilderFactory
11
 * @package Moka\Factory
12
 */
13
class ProxyBuilderFactory
14
{
15
    /**
16
     * @var array|ProxyBuilder[]
17
     */
18
    private static $mockBuilders = [];
19
20
    /**
21
     * @param MockingStrategyInterface $mockingStrategy
22
     * @return ProxyBuilder
23
     */
24 14
    public static function get(MockingStrategyInterface $mockingStrategy): ProxyBuilder
25
    {
26 14
        $key = self::key($mockingStrategy);
27 14
        if (!array_key_exists($key, self::$mockBuilders) || !self::$mockBuilders[$key] instanceof ProxyBuilder) {
28 3
            self::$mockBuilders[$key] = static::build(new $mockingStrategy);
29
        }
30
31 14
        return self::$mockBuilders[$key];
32
    }
33
34
    /**
35
     * @param MockingStrategyInterface $mockingStrategy
36
     * @return string
37
     */
38 14
    private static function key(MockingStrategyInterface $mockingStrategy): string
39
    {
40 14
        return get_class($mockingStrategy);
41
    }
42
43
    /**
44
     * @param MockingStrategyInterface $mockingStrategy
45
     * @return ProxyBuilder
46
     */
47 3
    protected static function build(MockingStrategyInterface $mockingStrategy): ProxyBuilder
48
    {
49 3
        return new ProxyBuilder($mockingStrategy);
50
    }
51
52 14
    public static function reset()
53
    {
54 14
        foreach (self::$mockBuilders as $mockBuilder) {
55 14
            $mockBuilder->reset();
56
        }
57
    }
58
}
59