-
Notifications
You must be signed in to change notification settings - Fork 440
/
Copy pathConfiguration.php
106 lines (90 loc) · 3.53 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
<?php
namespace Enqueue\Bundle\DependencyInjection;
use Enqueue\Symfony\Client\DependencyInjection\ClientFactory;
use Enqueue\Symfony\DependencyInjection\TransportFactory;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
final class Configuration implements ConfigurationInterface
{
private $debug;
public function __construct(bool $debug)
{
$this->debug = $debug;
}
public function getConfigTreeBuilder(): TreeBuilder
{
$tb = new TreeBuilder();
$rootNode = $tb->root('enqueue');
$rootNode
->beforeNormalization()
->always(function ($value) {
if (empty($value)) {
return [
'transport' => [
'default' => [
'dsn' => 'null:',
],
],
];
}
if (is_string($value)) {
return [
'transport' => [
'default' => [
'dsn' => $value,
],
],
];
}
return $value;
})
;
$transportFactory = new TransportFactory('default');
/** @var ArrayNodeDefinition $transportNode */
$transportNode = $rootNode->children()->arrayNode('transport');
$transportNode
->beforeNormalization()
->always(function ($value) {
if (empty($value)) {
return ['default' => ['dsn' => 'null:']];
}
if (is_string($value)) {
return ['default' => ['dsn' => $value]];
}
if (is_array($value) && array_key_exists('dsn', $value)) {
return ['default' => $value];
}
return $value;
});
$transportPrototypeNode = $transportNode
->requiresAtLeastOneElement()
->useAttributeAsKey('key')
->prototype('array')
;
$transportFactory->addTransportConfiguration($transportPrototypeNode);
$consumptionNode = $rootNode->children()->arrayNode('consumption');
$transportFactory->addQueueConsumerConfiguration($consumptionNode);
$clientFactory = new ClientFactory('default');
$clientNode = $rootNode->children()->arrayNode('client');
$clientFactory->addClientConfiguration($clientNode, $this->debug);
$rootNode->children()
->booleanNode('job')->defaultFalse()->end()
->arrayNode('async_events')
->addDefaultsIfNotSet()
->canBeEnabled()
->end()
->arrayNode('async_commands')
->addDefaultsIfNotSet()
->canBeEnabled()
->end()
->arrayNode('extensions')->addDefaultsIfNotSet()->children()
->booleanNode('doctrine_ping_connection_extension')->defaultFalse()->end()
->booleanNode('doctrine_clear_identity_map_extension')->defaultFalse()->end()
->booleanNode('signal_extension')->defaultValue(function_exists('pcntl_signal_dispatch'))->end()
->booleanNode('reply_extension')->defaultTrue()->end()
->end()->end()
;
return $tb;
}
}