Skip to content

Commit 7ed1840

Browse files
author
Pavel Batanov
authored
Merge pull request #4 from Vabogco/master
Extend configuration by default strategy
2 parents fad5545 + 31a972b commit 7ed1840

File tree

3 files changed

+95
-16
lines changed

3 files changed

+95
-16
lines changed

src/DependencyInjection/Configuration.php

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88

99
final class Configuration implements ConfigurationInterface
1010
{
11+
private const STRATEGIES = [
12+
'identical',
13+
'lowercase',
14+
];
15+
1116
/** {@inheritdoc} */
1217
public function getConfigTreeBuilder(): TreeBuilder
1318
{
@@ -20,8 +25,16 @@ public function getConfigTreeBuilder(): TreeBuilder
2025
$root = $builder->getRootNode();
2126
}
2227

23-
$root->children()->booleanNode('enum_name_type_mapping')
24-
->defaultValue(false);
28+
$root
29+
->children()
30+
->booleanNode('enum_name_type_mapping')
31+
->defaultValue(false)
32+
->end()
33+
->enumNode('default_strategy')
34+
->values(self::STRATEGIES)
35+
->defaultValue(self::STRATEGIES[0])
36+
->end()
37+
->end();
2538

2639
$this->configureEnumNodes($root);
2740

@@ -44,18 +57,14 @@ function (string $v) {
4457
)
4558
->end();
4659
$dbalTypeProto
47-
->children()->scalarNode('class')
48-
->isRequired()
49-
->example('My\Enum');
50-
$dbalTypeProto
51-
->children()->enumNode('strategy')
52-
->values(
53-
[
54-
'lowercase',
55-
'identical'
56-
]
57-
)
58-
->defaultValue('identical')
59-
;
60+
->children()
61+
->scalarNode('class')
62+
->isRequired()
63+
->example('My\Enum')
64+
->end()
65+
->enumNode('strategy')
66+
->values(self::STRATEGIES)
67+
->end()
68+
->end();
6069
}
6170
}

src/DependencyInjection/LamodaEnumExtension.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public function load(array $configs, ContainerBuilder $container): void
2525

2626
foreach ($configs['dbal_types'] ?? [] as $name => $typeConfig) {
2727
$fqcn = $typeConfig['class'];
28-
$strategy = $this->getStrategy($typeConfig['strategy'] ?? null);
28+
$strategy = $this->getStrategy($typeConfig['strategy'] ?? $configs['default_strategy']);
2929
$typeInitializer->addMethodCall('initialize', [$name, $fqcn, $strategy, $configs['enum_name_type_mapping']]);
3030
}
3131
}

tests/Unit/DependencyInjection/LamodaEnumExtensionTest.php

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,74 @@ public function testExtensionLoadsFilledConfigs(): void
7373
self::assertInstanceOf(Reference::class, $strat1);
7474
self::assertSame(LowercaseNamingStrategy::class, (string) $strat1);
7575
}
76+
77+
public function testExtensionLoadsConfigsWithDefaultStrategy(): void
78+
{
79+
$builder = new ContainerBuilder();
80+
$extension = new LamodaEnumExtension();
81+
82+
$extension->load(
83+
[
84+
[
85+
'enum_name_type_mapping' => true,
86+
'default_strategy' => 'lowercase',
87+
'dbal_types' => [
88+
'type_1' => TestEnum::class,
89+
'type_2' => [
90+
'class' => TestEnum::class,
91+
'strategy' => 'identical',
92+
],
93+
],
94+
],
95+
],
96+
$builder
97+
);
98+
99+
$initDef = $builder->getDefinition(EnumTypeInitializer::class);
100+
$calls = $initDef->getMethodCalls();
101+
102+
/** @var Reference $strat1 */
103+
$strat1 = $calls[0][1][2];
104+
self::assertInstanceOf(Reference::class, $strat1);
105+
self::assertSame(LowercaseNamingStrategy::class, (string) $strat1);
106+
107+
/** @var Reference $strat1 */
108+
$strat1 = $calls[1][1][2];
109+
self::assertInstanceOf(Reference::class, $strat1);
110+
self::assertSame(IdenticalNamingStrategy::class, (string) $strat1);
111+
}
112+
113+
public function testExtensionLoadsConfigsWithoutStrategies(): void
114+
{
115+
$builder = new ContainerBuilder();
116+
$extension = new LamodaEnumExtension();
117+
118+
$extension->load(
119+
[
120+
[
121+
'enum_name_type_mapping' => true,
122+
'dbal_types' => [
123+
'type_1' => TestEnum::class,
124+
'type_2' => [
125+
'class' => TestEnum::class,
126+
],
127+
],
128+
],
129+
],
130+
$builder
131+
);
132+
133+
$initDef = $builder->getDefinition(EnumTypeInitializer::class);
134+
$calls = $initDef->getMethodCalls();
135+
136+
/** @var Reference $strat1 */
137+
$strat1 = $calls[0][1][2];
138+
self::assertInstanceOf(Reference::class, $strat1);
139+
self::assertSame(IdenticalNamingStrategy::class, (string)$strat1);
140+
141+
/** @var Reference $strat1 */
142+
$strat1 = $calls[1][1][2];
143+
self::assertInstanceOf(Reference::class, $strat1);
144+
self::assertSame(IdenticalNamingStrategy::class, (string)$strat1);
145+
}
76146
}

0 commit comments

Comments
 (0)