Skip to content

Commit b4c3acd

Browse files
authored
Merge pull request #31 from AlexanderForks/custom-driver
Add support for registering custom drivers
2 parents 5966d1a + 628b184 commit b4c3acd

3 files changed

Lines changed: 19 additions & 3 deletions

File tree

DependencyInjection/BernardExtension.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ protected function loadInternal(array $config, ContainerBuilder $container)
1515
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
1616
$loader->load('services.xml');
1717

18-
$container->setAlias('bernard.driver', 'bernard.driver.'.$config['driver']);
19-
2018
switch ($config['driver']) {
2119
case 'doctrine':
2220
$this->registerDoctrineConfiguration($config['options'], $container);
@@ -51,6 +49,12 @@ protected function loadInternal(array $config, ContainerBuilder $container)
5149
break;
5250
}
5351

52+
if ($config['driver'] === 'custom') {
53+
$container->setAlias('bernard.driver', $config['options']['custom_service']);
54+
} else {
55+
$container->setAlias('bernard.driver', 'bernard.driver.'.$config['driver']);
56+
}
57+
5458
$this->registerListeners($config['listeners'], $container);
5559
}
5660

DependencyInjection/Configuration.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public function getConfigTreeBuilder()
1818
->enumNode('driver')
1919
->isRequired()
2020
->cannotBeEmpty()
21-
->values(['doctrine', 'file', 'phpamqp', 'phpredis', 'predis', 'ironmq', 'sqs', 'pheanstalk'])
21+
->values(['doctrine', 'file', 'phpamqp', 'phpredis', 'predis', 'ironmq', 'sqs', 'pheanstalk', 'custom'])
2222
->end()
2323

2424
->arrayNode('options')
@@ -42,6 +42,7 @@ public function getConfigTreeBuilder()
4242
->end()
4343
->scalarNode('prefetch')->defaultNull()->end()
4444
->scalarNode('pheanstalk_service')->defaultNull()->end()
45+
->scalarNode('custom_service')->defaultNull()->end()
4546
->end()
4647
->end()
4748

@@ -83,6 +84,7 @@ public function getConfigTreeBuilder()
8384
->validateDriver($root, 'ironmq', 'ironmq_service')
8485
->validateDriver($root, 'sqs', 'sqs_service')
8586
->validateDriver($root, 'pheanstalk', 'pheanstalk_service')
87+
->validateDriver($root, 'custom', 'custom_service')
8688
;
8789

8890
return $tree;

Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public function testDefaults()
3636
'sqs_service' => null,
3737
'sqs_queue_map' => [],
3838
'pheanstalk_service' => null,
39+
'custom_service' => null,
3940
], $config['options']);
4041
}
4142

@@ -101,6 +102,15 @@ public function testPheanstalkDriverRequiresServiceOptionToBeSet()
101102
$this->processConfig(['driver' => 'pheanstalk']);
102103
}
103104

105+
/**
106+
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
107+
* @expectedExceptionMessage The "custom_service" option must be defined when using the "custom" driver.
108+
*/
109+
public function testCustomDriverRequiresServiceOptionToBeSet()
110+
{
111+
$this->processConfig(['driver' => 'custom']);
112+
}
113+
104114
/**
105115
* @param array $config
106116
*

0 commit comments

Comments
 (0)