Skip to content

Commit ead6e5e

Browse files
authored
Merge pull request #4 from peckadesign/3-automaticke-prirazeni-consumeru-do-skupiny
Automatické přiřazení consumerů projektu do skupiny
2 parents d5af498 + d7be79d commit ead6e5e

File tree

2 files changed

+57
-6
lines changed

2 files changed

+57
-6
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Pd\Supervisor\DI;
4+
5+
class MissingConfigurationValueException extends \Exception
6+
{
7+
8+
}

src/DI/SupervisorExtension.php

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ final class SupervisorExtension extends CompilerExtension
2020
'prefix' => NULL,
2121
'configuration' => [],
2222
'defaults' => [],
23+
'group' => NULL,
2324
];
2425

2526

@@ -28,6 +29,13 @@ public function loadConfiguration()
2829
$builder = $this->getContainerBuilder();
2930

3031
$config = $this->getConfig(self::DEFAULTS);
32+
33+
if ( ! isset($config['prefix'])) {
34+
throw new \Pd\Supervisor\DI\MissingConfigurationValueException(
35+
'Parametr \'prefix\' pro extension \'supervisor\' je vyzadovany. Doplnte jej a jako hodnotu vyberte idealne nazev projektu.'
36+
);
37+
}
38+
3139
foreach ($this->compiler->getExtensions() as $extension) {
3240
if ($extension instanceof IConfigurationProvider) {
3341
$config['configuration'] = array_merge_recursive($extension->getSupervisorConfiguration(), $config['configuration']);
@@ -37,7 +45,8 @@ public function loadConfiguration()
3745
$this->loadSupervisorConfiguration(
3846
(array) $config['configuration'],
3947
(array) $config['defaults'],
40-
isset($config['prefix']) ? (string) $config['prefix'] : NULL
48+
(string) $config['prefix'],
49+
isset($config['group']) ? (string) $config['group'] : NULL
4150
);
4251

4352
$builder->addDefinition($this->prefix('renderCommand'))
@@ -51,23 +60,21 @@ public function loadConfiguration()
5160
}
5261

5362

54-
private function loadSupervisorConfiguration(array $config, array $defaults = [], string $prefix = NULL)
63+
private function loadSupervisorConfiguration(array $config, array $defaults = [], string $prefix, string $group = NULL)
5564
{
5665
$builder = $this->getContainerBuilder();
5766

5867
$configuration = $builder->addDefinition($this->prefix('configuration'))
5968
->setClass(Configuration::class)
6069
;
70+
6171
foreach ($config as $sectionName => $sectionConfig) {
6272
if ( ! $sectionClass = (new Configuration)->findSection($sectionName)) {
6373
$sectionClass = GenericSection::class;
6474
}
6575
if (is_subclass_of($sectionClass, Named::class)) {
6676
foreach ((array) $sectionConfig as $name => $properties) {
67-
$name = Helpers::expand($name, $builder->parameters);
68-
if ($prefix !== NULL) {
69-
$name = sprintf('%s-%s', $prefix, $name);
70-
}
77+
$name = $this->prepareName($name, $prefix);
7178
$configuration->addSetup('addSection', [
7279
new Statement($sectionClass, [
7380
$name,
@@ -84,6 +91,8 @@ private function loadSupervisorConfiguration(array $config, array $defaults = []
8491
]);
8592
}
8693
}
94+
95+
$this->prepareGroup($config, $configuration, $prefix, $group);
8796
}
8897

8998

@@ -99,4 +108,38 @@ private function mergeProperties(array $properties, array $defaults = []): array
99108

100109
return $properties;
101110
}
111+
112+
113+
private function prepareName(string $name, string $prefix): string
114+
{
115+
$builder = $this->getContainerBuilder();
116+
$name = Helpers::expand($name, $builder->parameters);
117+
118+
$name = sprintf('%s-%s', $prefix, $name);
119+
120+
return $name;
121+
}
122+
123+
124+
private function prepareGroup(array $config, \Nette\DI\ServiceDefinition $configuration, string $prefix, string $group = NULL): void
125+
{
126+
if ( ! $group) {
127+
return;
128+
}
129+
130+
$webPrograms = implode(',', array_map(function ($name) use ($prefix): string {
131+
return $this->prepareName($name, $prefix);
132+
}, array_keys($config['program'])));
133+
134+
$sectionClass = (new Configuration)->findSection('group');
135+
$configuration->addSetup('addSection', [
136+
new Statement(
137+
$sectionClass,
138+
[
139+
$group,
140+
['programs' => $webPrograms],
141+
]
142+
)
143+
]);
144+
}
102145
}

0 commit comments

Comments
 (0)