Skip to content

Commit 8217c7a

Browse files
authored
Merge pull request #13 from php-etl/fix/use-fields-functions-from-toolbox
Use mutuallyExclusiveFields and mutuallyDependentFields functions
2 parents a248db0 + 88e43fa commit 8217c7a

File tree

2 files changed

+31
-71
lines changed

2 files changed

+31
-71
lines changed

composer.lock

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Configuration.php

Lines changed: 26 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
77
use Symfony\Component\Config\Definition\NodeInterface;
88
use Symfony\Component\ExpressionLanguage\Expression;
9+
use function Kiboko\Component\SatelliteToolbox\Configuration\mutuallyExclusiveFields;
10+
use function Kiboko\Component\SatelliteToolbox\Configuration\mutuallyDependentFields;
911

1012
final class Configuration implements PluginConfigurationInterface
1113
{
@@ -22,7 +24,7 @@ public function getConfigTreeBuilder()
2224
->always($this->cleanupFields('conditional', 'expression_language', 'map', 'list', 'object', 'collection'))
2325
->end()
2426
->validate()
25-
->always($this->mutuallyExclusiveFields('conditional', 'map', 'list', 'object', 'collection'))
27+
->always(mutuallyExclusiveFields('conditional', 'map', 'list', 'object', 'collection'))
2628
->end()
2729
->children()
2830
->scalarNode('class')->end()
@@ -43,34 +45,34 @@ public function getConfigTreeBuilder()
4345
->thenInvalid('Your configuration should be an array.')
4446
->end()
4547
->validate()
46-
->always($this->mutuallyExclusiveFields('copy', 'expression', 'constant', 'class', 'map', 'object', 'list', 'collection'))
48+
->always(mutuallyExclusiveFields('copy', 'expression', 'constant', 'class', 'map', 'object', 'list', 'collection'))
4749
->end()
4850
->validate()
49-
->always($this->mutuallyExclusiveFields('expression', 'copy', 'constant', 'map'))
51+
->always(mutuallyExclusiveFields('expression', 'copy', 'constant', 'map'))
5052
->end()
5153
->validate()
52-
->always($this->mutuallyExclusiveFields('constant', 'copy', 'expression', 'class', 'map', 'object', 'list', 'collection'))
54+
->always(mutuallyExclusiveFields('constant', 'copy', 'expression', 'class', 'map', 'object', 'list', 'collection'))
5355
->end()
5456
->validate()
55-
->always($this->mutuallyExclusiveFields('map', 'copy', 'expression', 'constant', 'class', 'object', 'list', 'collection'))
57+
->always(mutuallyExclusiveFields('map', 'copy', 'expression', 'constant', 'class', 'object', 'list', 'collection'))
5658
->end()
5759
->validate()
58-
->always($this->mutuallyExclusiveFields('object', 'copy', 'constant', 'map', 'list', 'collection'))
60+
->always(mutuallyExclusiveFields('object', 'copy', 'constant', 'map', 'list', 'collection'))
5961
->end()
6062
->validate()
61-
->always($this->mutuallyExclusiveFields('list', 'copy', 'constant', 'class', 'map', 'object', 'collection'))
63+
->always(mutuallyExclusiveFields('list', 'copy', 'constant', 'class', 'map', 'object', 'collection'))
6264
->end()
6365
->validate()
64-
->always($this->mutuallyExclusiveFields('collection', 'copy', 'constant', 'map', 'object', 'list'))
66+
->always(mutuallyExclusiveFields('collection', 'copy', 'constant', 'map', 'object', 'list'))
6567
->end()
6668
->validate()
67-
->always($this->mutuallyDependentFields('object', 'class', 'expression'))
69+
->always(mutuallyDependentFields('object', 'class', 'expression'))
6870
->end()
6971
->validate()
70-
->always($this->mutuallyDependentFields('collection', 'class', 'expression'))
72+
->always(mutuallyDependentFields('collection', 'class', 'expression'))
7173
->end()
7274
->validate()
73-
->always($this->mutuallyDependentFields('list', 'expression'))
75+
->always(mutuallyDependentFields('list', 'expression'))
7476
->end()
7577
;
7678

@@ -141,48 +143,6 @@ private function getCollectionNode(): NodeInterface
141143
return $definition->getNode(true);
142144
}
143145

144-
private function mutuallyExclusiveFields(string $field, string ...$exclusions): \Closure
145-
{
146-
return function (array $value) use ($field, $exclusions) {
147-
if (!array_key_exists($field, $value)) {
148-
return $value;
149-
}
150-
151-
foreach ($exclusions as $exclusion) {
152-
if (array_key_exists($exclusion, $value)) {
153-
throw new \InvalidArgumentException(sprintf(
154-
'Your configuration should either contain the "%s" or the "%s" field, not both.',
155-
$field,
156-
$exclusion,
157-
));
158-
}
159-
}
160-
161-
return $value;
162-
};
163-
}
164-
165-
private function mutuallyDependentFields(string $field, string ...$dependencies): \Closure
166-
{
167-
return function (array $value) use ($field, $dependencies) {
168-
if (!array_key_exists($field, $value)) {
169-
return $value;
170-
}
171-
172-
foreach ($dependencies as $dependency) {
173-
if (!array_key_exists($dependency, $value)) {
174-
throw new \InvalidArgumentException(sprintf(
175-
'Your configuration should contain the "%s" field if the "%s" field is present.',
176-
$dependency,
177-
$field,
178-
));
179-
}
180-
}
181-
182-
return $value;
183-
};
184-
}
185-
186146
private function cleanupFields(string ...$fieldNames): \Closure
187147
{
188148
return function (array $value) use ($fieldNames) {
@@ -210,40 +170,40 @@ private function getChildTreeBuilder(string $name): TreeBuilder
210170
->always($this->cleanupFields('map', 'list', 'object', 'collection'))
211171
->end()
212172
->validate()
213-
->always($this->mutuallyExclusiveFields('map', 'list', 'object', 'collection'))
173+
->always(mutuallyExclusiveFields('map', 'list', 'object', 'collection'))
214174
->end()
215175
->validate()
216-
->always($this->mutuallyExclusiveFields('copy', 'expression', 'constant', 'class', 'map', 'object', 'list', 'collection'))
176+
->always(mutuallyExclusiveFields('copy', 'expression', 'constant', 'class', 'map', 'object', 'list', 'collection'))
217177
->end()
218178
->validate()
219-
->always($this->mutuallyExclusiveFields('expression', 'copy', 'constant'))
179+
->always(mutuallyExclusiveFields('expression', 'copy', 'constant'))
220180
->end()
221181
->validate()
222-
->always($this->mutuallyExclusiveFields('constant', 'copy', 'expression', 'class', 'map', 'object', 'list', 'collection'))
182+
->always(mutuallyExclusiveFields('constant', 'copy', 'expression', 'class', 'map', 'object', 'list', 'collection'))
223183
->end()
224184
->validate()
225-
->always($this->mutuallyExclusiveFields('map', 'copy', 'constant', 'class', 'object', 'list', 'collection'))
185+
->always(mutuallyExclusiveFields('map', 'copy', 'constant', 'class', 'object', 'list', 'collection'))
226186
->end()
227187
->validate()
228-
->always($this->mutuallyExclusiveFields('object', 'copy', 'constant', 'map', 'list', 'collection'))
188+
->always(mutuallyExclusiveFields('object', 'copy', 'constant', 'map', 'list', 'collection'))
229189
->end()
230190
->validate()
231-
->always($this->mutuallyExclusiveFields('list', 'copy', 'constant', 'class', 'map', 'object', 'collection'))
191+
->always(mutuallyExclusiveFields('list', 'copy', 'constant', 'class', 'map', 'object', 'collection'))
232192
->end()
233193
->validate()
234-
->always($this->mutuallyExclusiveFields('collection', 'copy', 'constant', 'map', 'object', 'list'))
194+
->always(mutuallyExclusiveFields('collection', 'copy', 'constant', 'map', 'object', 'list'))
235195
->end()
236196
->validate()
237-
->always($this->mutuallyDependentFields('object', 'class', 'expression'))
197+
->always(mutuallyDependentFields('object', 'class', 'expression'))
238198
->end()
239199
->validate()
240-
->always($this->mutuallyDependentFields('collection', 'class', 'expression'))
200+
->always(mutuallyDependentFields('collection', 'class', 'expression'))
241201
->end()
242202
->validate()
243-
->always($this->mutuallyDependentFields('map', 'expression'))
203+
->always(mutuallyDependentFields('map', 'expression'))
244204
->end()
245205
->validate()
246-
->always($this->mutuallyDependentFields('list', 'expression'))
206+
->always(mutuallyDependentFields('list', 'expression'))
247207
->end()
248208
->validate()
249209
->ifTrue(function (array $value) {
@@ -337,7 +297,7 @@ public function getConditionalTreeBuilder(): TreeBuilder
337297
->always($this->cleanupFields('map', 'list', 'object', 'collection'))
338298
->end()
339299
->validate()
340-
->always($this->mutuallyExclusiveFields('map', 'list', 'object', 'collection'))
300+
->always(mutuallyExclusiveFields('map', 'list', 'object', 'collection'))
341301
->end()
342302
->children()
343303
->scalarNode('condition')->end()

0 commit comments

Comments
 (0)