forked from wavevision/di-service-annotation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Configuration.php
157 lines (130 loc) · 3.33 KB
/
Configuration.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<?php declare (strict_types = 1);
namespace Wavevision\DIServiceAnnotation;
use Nette\SmartObject;
use Wavevision\DIServiceAnnotation\Generators\Component;
use Wavevision\DIServiceAnnotation\Generators\DefaultComponent;
use Wavevision\DIServiceAnnotation\Generators\DefaultFactory;
use Wavevision\DIServiceAnnotation\Generators\DefaultInject;
use Wavevision\DIServiceAnnotation\Generators\Factory;
use Wavevision\DIServiceAnnotation\Generators\Inject;
use Wavevision\Utils\Path;
final class Configuration
{
use SmartObject;
/**
* Where to find DIService annotation
*/
private string $sourceDirectory;
/**
* Mask to find DIService annotation
*/
private string $mask;
/**
* Default neon output file
*/
private string $outputFile;
/**
* @var array<string>
* For splitting services to multiple neon files by namespace
* ```php
* [
* 'RootNamespace\Namespace1' => config1.neon
* 'RootNamespace\Namespace2' => config2.neon
* ]
* ```
* other services will be generated in $outputFile
*/
private array $fileMapping;
private Inject $injectGenerator;
private Factory $factoryGenerator;
private Component $componentFactory;
public function __construct(string $sourceDirectory, string $outputFile, bool $regenerate = false)
{
$this->sourceDirectory = $sourceDirectory;
$this->outputFile = $outputFile;
$this->mask = '*.php';
$this->fileMapping = [];
$templates = Path::create(__DIR__, 'Generators', 'templates');
$this->injectGenerator = new DefaultInject('Inject%s', $templates->string('inject.txt'), $regenerate);
$this->factoryGenerator = new DefaultFactory('%sFactory', $templates->string('factory.txt'), $regenerate);
$this->componentFactory = new DefaultComponent('%sComponent', $templates->string('component.txt'), $regenerate);
}
public function getSourceDirectory(): string
{
return $this->sourceDirectory;
}
public function setSourceDirectory(string $sourceDirectory): self
{
$this->sourceDirectory = $sourceDirectory;
return $this;
}
public function getMask(): string
{
return $this->mask;
}
public function setMask(string $mask): self
{
$this->mask = $mask;
return $this;
}
public function getOutputFile(): string
{
return $this->outputFile;
}
public function setOutputFile(string $outputFile): self
{
$this->outputFile = $outputFile;
return $this;
}
/**
* @return array<string>
*/
public function getFileMapping(): array
{
return $this->fileMapping;
}
/**
* @param array<string> $fileMapping
*/
public function setFileMapping(array $fileMapping): self
{
$this->fileMapping = $fileMapping;
return $this;
}
public function getInjectGenerator(): Inject
{
return $this->injectGenerator;
}
/**
* @return static
*/
public function setInjectGenerator(Inject $injectGenerator)
{
$this->injectGenerator = $injectGenerator;
return $this;
}
public function getFactoryGenerator(): Factory
{
return $this->factoryGenerator;
}
/**
* @return static
*/
public function setFactoryGenerator(Factory $factoryGenerator)
{
$this->factoryGenerator = $factoryGenerator;
return $this;
}
public function getComponentFactory(): Component
{
return $this->componentFactory;
}
/**
* @return static
*/
public function setComponentFactory(Component $componentFactory)
{
$this->componentFactory = $componentFactory;
return $this;
}
}