Completed
Pull Request — master (#391)
by Marco
07:35
created

Configuration::setProxyAutoloader()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ProxyManager;
6
7
use ProxyManager\Autoloader\Autoloader;
8
use ProxyManager\Autoloader\AutoloaderInterface;
9
use ProxyManager\FileLocator\FileLocator;
10
use ProxyManager\GeneratorStrategy\EvaluatingGeneratorStrategy;
11
use ProxyManager\GeneratorStrategy\GeneratorStrategyInterface;
12
use ProxyManager\Inflector\ClassNameInflector;
13
use ProxyManager\Inflector\ClassNameInflectorInterface;
14
use ProxyManager\Signature\ClassSignatureGenerator;
15
use ProxyManager\Signature\ClassSignatureGeneratorInterface;
16
use ProxyManager\Signature\SignatureChecker;
17
use ProxyManager\Signature\SignatureCheckerInterface;
18
use ProxyManager\Signature\SignatureGenerator;
19
use ProxyManager\Signature\SignatureGeneratorInterface;
20
21
/**
22
 * Base configuration class for the proxy manager - serves as micro disposable DIC/facade
23
 *
24
 * @author Marco Pivetta <[email protected]>
25
 * @license MIT
26
 */
27
class Configuration
28
{
29
    const DEFAULT_PROXY_NAMESPACE = 'ProxyManagerGeneratedProxy';
30
31
    /**
32
     * @var string|null
33
     */
34
    protected $proxiesTargetDir;
35
36
    /**
37
     * @var string
38
     */
39
    protected $proxiesNamespace = self::DEFAULT_PROXY_NAMESPACE;
40
41
    /**
42
     * @var GeneratorStrategyInterface|null
43
     */
44
    protected $generatorStrategy;
45
46
    /**
47
     * @var callable|null
48
     */
49
    protected $proxyAutoloader;
50
51
    /**
52
     * @var ClassNameInflectorInterface|null
53
     */
54
    protected $classNameInflector;
55
56
    /**
57
     * @var SignatureGeneratorInterface|null
58
     */
59
    protected $signatureGenerator;
60
61
    /**
62
     * @var SignatureCheckerInterface|null
63
     */
64
    protected $signatureChecker;
65
66
    /**
67
     * @var ClassSignatureGeneratorInterface|null
68
     */
69
    protected $classSignatureGenerator;
70
71 1
    public function setProxyAutoloader(AutoloaderInterface $proxyAutoloader) : void
72
    {
73 1
        $this->proxyAutoloader = $proxyAutoloader;
74 1
    }
75
76 1
    public function getProxyAutoloader() : AutoloaderInterface
77
    {
78 1
        return $this->proxyAutoloader
79 1
            ?: $this->proxyAutoloader = new Autoloader(
80 1
                new FileLocator($this->getProxiesTargetDir()),
81 1
                $this->getClassNameInflector()
82
            );
83
    }
84
85 1
    public function setProxiesNamespace(string $proxiesNamespace) : void
86
    {
87 1
        $this->proxiesNamespace = $proxiesNamespace;
88 1
    }
89
90 1
    public function getProxiesNamespace() : string
91
    {
92 1
        return $this->proxiesNamespace;
93
    }
94
95 1
    public function setProxiesTargetDir(string $proxiesTargetDir) : void
96
    {
97 1
        $this->proxiesTargetDir = $proxiesTargetDir;
98 1
    }
99
100 1
    public function getProxiesTargetDir() : string
101
    {
102 1
        return $this->proxiesTargetDir ?: $this->proxiesTargetDir = sys_get_temp_dir();
103
    }
104
105 1
    public function setGeneratorStrategy(GeneratorStrategyInterface $generatorStrategy) : void
106
    {
107 1
        $this->generatorStrategy = $generatorStrategy;
108 1
    }
109
110 2
    public function getGeneratorStrategy() : GeneratorStrategyInterface
111
    {
112 2
        return $this->generatorStrategy
113 2
            ?: $this->generatorStrategy = new EvaluatingGeneratorStrategy();
114
    }
115
116 1
    public function setClassNameInflector(ClassNameInflectorInterface $classNameInflector) : void
117
    {
118 1
        $this->classNameInflector = $classNameInflector;
119 1
    }
120
121 1
    public function getClassNameInflector() : ClassNameInflectorInterface
122
    {
123 1
        return $this->classNameInflector
124 1
            ?: $this->classNameInflector = new ClassNameInflector($this->getProxiesNamespace());
125
    }
126
127 1
    public function setSignatureGenerator(SignatureGeneratorInterface $signatureGenerator) : void
128
    {
129 1
        $this->signatureGenerator = $signatureGenerator;
130 1
    }
131
132 1
    public function getSignatureGenerator() : SignatureGeneratorInterface
133
    {
134 1
        return $this->signatureGenerator ?: $this->signatureGenerator = new SignatureGenerator();
135
    }
136
137 1
    public function setSignatureChecker(SignatureCheckerInterface $signatureChecker) : void
138
    {
139 1
        $this->signatureChecker = $signatureChecker;
140 1
    }
141
142 1
    public function getSignatureChecker() : SignatureCheckerInterface
143
    {
144 1
        return $this->signatureChecker
145 1
            ?: $this->signatureChecker = new SignatureChecker($this->getSignatureGenerator());
146
    }
147
148 1
    public function setClassSignatureGenerator(ClassSignatureGeneratorInterface $classSignatureGenerator) : void
149
    {
150 1
        $this->classSignatureGenerator = $classSignatureGenerator;
151 1
    }
152
153 1
    public function getClassSignatureGenerator() : ClassSignatureGeneratorInterface
154
    {
155 1
        return $this->classSignatureGenerator
156 1
            ?: new ClassSignatureGenerator($this->getSignatureGenerator());
157
    }
158
}
159