Skip to content

Commit 939b015

Browse files
committed
feat(normalization): support enabling specific processors via manager constructor
1 parent a150b93 commit 939b015

File tree

5 files changed

+74
-22
lines changed

5 files changed

+74
-22
lines changed

src/Config/migration-generator.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@
55
use N3XT0R\MigrationGenerator\Service\Generator\Normalization\Processors\PivotProcessor;
66

77
return [
8+
'config' => [
9+
'defaults' => [
10+
'normalizer' => [
11+
'enabled' => ['pivot'],
12+
],
13+
],
14+
],
815
'definitions' => [
916
'table' => [
1017
'class' => Definition\TableDefinition::class,

src/Providers/MigrationGeneratorServiceProvider.php

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use N3XT0R\MigrationGenerator\Service\Generator\Compiler\MigrationCompilerInterface;
1515
use N3XT0R\MigrationGenerator\Service\Generator\MigrationGenerator;
1616
use N3XT0R\MigrationGenerator\Service\Generator\MigrationGeneratorInterface;
17+
use N3XT0R\MigrationGenerator\Service\Generator\Normalization\SchemaNormalizationManager;
18+
use N3XT0R\MigrationGenerator\Service\Generator\Normalization\SchemaNormalizationManagerInterface;
1719
use N3XT0R\MigrationGenerator\Service\Generator\Resolver\DefinitionResolver;
1820
use N3XT0R\MigrationGenerator\Service\Generator\Resolver\DefinitionResolverInterface;
1921
use N3XT0R\MigrationGenerator\Service\Parser\SchemaParserFactory;
@@ -52,6 +54,7 @@ public function register(): void
5254
$this->registerCompilerEngine();
5355
$this->registerCompiler();
5456
$this->registerDefinitionResolver();
57+
$this->registerNormalizer();
5558
$this->registerGenerator();
5659
$this->registerCommands();
5760
}
@@ -95,23 +98,15 @@ function (Application $app, array $params = []) {
9598
);
9699
}
97100

98-
protected function getDefinitions(): array
101+
protected function getConfigSection(string $key): array
99102
{
100-
return (array)app('config')->get('migration-generator.definitions');
101-
}
102-
103-
protected function getMapper(): array
104-
{
105-
return (array)app('config')->get('migration-generator.mapper');
103+
return (array)app('config')->get('migration-generator.' . $key);
106104
}
107105

108106
protected function registerDefinitionResolver(): void
109107
{
110-
$definitions = $this->getDefinitions();
111-
112-
foreach ($definitions as $definition) {
113-
$this->app->bind($definition['class'], $definition['class']);
114-
}
108+
$definitions = $this->getConfigSection('definitions');
109+
$this->bindClasses($definitions);
115110

116111
$this->app->bind(
117112
DefinitionResolverInterface::class,
@@ -168,10 +163,6 @@ static function (Application $app, array $params) {
168163
);
169164
}
170165

171-
protected function registerNormalizer(): void
172-
{
173-
}
174-
175166
protected function registerCompilerEngine(): void
176167
{
177168
$this->app->bind(ReplaceEngine::class, ReplaceEngine::class);
@@ -193,10 +184,8 @@ static function () use ($app) {
193184

194185
protected function registerCompiler(): void
195186
{
196-
$mapper = $this->getMapper();
197-
foreach ($mapper as $map) {
198-
$this->app->bind($map['class'], $map['class']);
199-
}
187+
$mapper = $this->getConfigSection('mapper');
188+
$this->bindClasses($mapper);
200189

201190
$this->app->bind(
202191
MigrationCompilerInterface::class,
@@ -214,4 +203,29 @@ static function (Application $app) use ($mapper) {
214203
}
215204
);
216205
}
206+
207+
protected function bindClasses(array $classes): void
208+
{
209+
foreach ($classes as $map) {
210+
$this->app->bind($map['class'], $map['class']);
211+
}
212+
}
213+
214+
215+
protected function registerNormalizer(): void
216+
{
217+
$normalizer = $this->getConfigSection('normalizer');
218+
$this->bindClasses($normalizer);
219+
220+
$this->app->bind(
221+
SchemaNormalizationManagerInterface::class,
222+
static function (Application $app, array $params) use ($normalizer) {
223+
$enabledProcessors = null;
224+
if (array_key_exists('enabled', $params)) {
225+
$enabledProcessors = (array)$params['enabled'];
226+
}
227+
return new SchemaNormalizationManager($normalizer, $enabledProcessors);
228+
}
229+
);
230+
}
217231
}

src/Service/Generator/Normalization/Processors/PivotProcessor.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@
99

1010
class PivotProcessor implements ProcessorInterface
1111
{
12+
13+
public function getKey(): string
14+
{
15+
return 'pivot';
16+
}
17+
1218
public function process(NormalizationContext $context): ResultEntity
1319
{
1420
$result = $context->getCurrent();

src/Service/Generator/Normalization/Processors/ProcessorInterface.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@
88
interface ProcessorInterface
99
{
1010
public function process(NormalizationContext $context): ResultEntity;
11+
12+
public function getKey(): string;
1113
}

src/Service/Generator/Normalization/SchemaNormalizationManager.php

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use N3XT0R\MigrationGenerator\Service\Generator\Definition\Entity\ResultEntity;
66
use N3XT0R\MigrationGenerator\Service\Generator\Normalization\Context\NormalizationContext;
77
use N3XT0R\MigrationGenerator\Service\Generator\Normalization\Processors\ProcessorInterface;
8+
use N3XT0R\MigrationGenerator\Service\Generator\Sort\TopSort;
89

910
/**
1011
* Coordinates the execution of schema normalization processors.
@@ -22,10 +23,15 @@ class SchemaNormalizationManager implements SchemaNormalizationManagerInterface
2223
*/
2324
protected array $processors = [];
2425

26+
/**
27+
* @var string[]|null
28+
*/
29+
protected ?array $enabledProcessors = null;
30+
2531
/**
2632
* @param iterable<ProcessorInterface> $processors
2733
*/
28-
public function __construct(iterable $processors = [])
34+
public function __construct(iterable $processors = [], ?array $enabledProcessors = null)
2935
{
3036
foreach ($processors as $processor) {
3137
$this->addProcessor($processor);
@@ -37,6 +43,12 @@ public function __construct(iterable $processors = [])
3743
*/
3844
public function addProcessor(ProcessorInterface $processor): void
3945
{
46+
if (is_array($this->getEnabledProcessors())) {
47+
$key = $processor->getKey();
48+
if (!in_array($key, $this->getEnabledProcessors(), true)) {
49+
return;
50+
}
51+
}
4052
$this->processors[] = $processor;
4153
}
4254

@@ -60,6 +72,16 @@ public function setProcessors(iterable $processors = []): void
6072
}
6173
}
6274

75+
public function getEnabledProcessors(): ?array
76+
{
77+
return $this->enabledProcessors;
78+
}
79+
80+
public function setEnabledProcessors(?array $enabledProcessors): void
81+
{
82+
$this->enabledProcessors = $enabledProcessors;
83+
}
84+
6385
/**
6486
* Executes all processors on the given schema result using a shared context.
6587
*
@@ -70,8 +92,9 @@ public function normalize(ResultEntity $result): ResultEntity
7092
{
7193
$context = new NormalizationContext($result);
7294
$processors = $this->getProcessors();
95+
$sortedProcessors = TopSort::sort($processors);
7396

74-
foreach ($processors as $processor) {
97+
foreach ($sortedProcessors as $processor) {
7598
$updated = $processor->process($context);
7699
$context->update($updated);
77100
}

0 commit comments

Comments
 (0)