Skip to content

Commit ec5e1bb

Browse files
authoredJun 29, 2017
Merge pull request #126 from php-enqueue/client-split-transport-factory-interface
[symfony] Extract DriverFactoryInterface from TransportFactoryInterface.
2 parents dcbb9f7 + 5580d79 commit ec5e1bb

14 files changed

+137
-10
lines changed
 

Diff for: ‎pkg/amqp-ext/Symfony/AmqpTransportFactory.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
use Enqueue\AmqpExt\AmqpConnectionFactory;
66
use Enqueue\AmqpExt\AmqpContext;
77
use Enqueue\AmqpExt\Client\AmqpDriver;
8+
use Enqueue\Symfony\DriverFactoryInterface;
89
use Enqueue\Symfony\TransportFactoryInterface;
910
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
1011
use Symfony\Component\DependencyInjection\ContainerBuilder;
1112
use Symfony\Component\DependencyInjection\Definition;
1213
use Symfony\Component\DependencyInjection\Reference;
1314

14-
class AmqpTransportFactory implements TransportFactoryInterface
15+
class AmqpTransportFactory implements TransportFactoryInterface, DriverFactoryInterface
1516
{
1617
/**
1718
* @var string

Diff for: ‎pkg/dbal/Symfony/DbalTransportFactory.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
use Enqueue\Dbal\DbalConnectionFactory;
77
use Enqueue\Dbal\DbalContext;
88
use Enqueue\Dbal\ManagerRegistryConnectionFactory;
9+
use Enqueue\Symfony\DriverFactoryInterface;
910
use Enqueue\Symfony\TransportFactoryInterface;
1011
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
1112
use Symfony\Component\DependencyInjection\ContainerBuilder;
1213
use Symfony\Component\DependencyInjection\Definition;
1314
use Symfony\Component\DependencyInjection\Reference;
1415

15-
class DbalTransportFactory implements TransportFactoryInterface
16+
class DbalTransportFactory implements TransportFactoryInterface, DriverFactoryInterface
1617
{
1718
/**
1819
* @var string

Diff for: ‎pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Enqueue\JobQueue\Job;
77
use Enqueue\Null\Symfony\NullTransportFactory;
88
use Enqueue\Symfony\DefaultTransportFactory;
9+
use Enqueue\Symfony\DriverFactoryInterface;
910
use Enqueue\Symfony\TransportFactoryInterface;
1011
use Symfony\Component\Config\FileLocator;
1112
use Symfony\Component\Config\Resource\FileResource;
@@ -68,7 +69,9 @@ public function load(array $configs, ContainerBuilder $container)
6869
$loader->load('extensions/exclusive_command_extension.yml');
6970

7071
foreach ($config['transport'] as $name => $transportConfig) {
71-
$this->factories[$name]->createDriver($container, $transportConfig);
72+
if ($this->factories[$name] instanceof DriverFactoryInterface) {
73+
$this->factories[$name]->createDriver($container, $transportConfig);
74+
}
7275
}
7376

7477
if (isset($config['transport']['default']['alias']) && false == isset($config['transport'][$config['transport']['default']['alias']])) {

Diff for: ‎pkg/enqueue-bundle/Tests/Unit/DependencyInjection/EnqueueExtensionTest.php

+25
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Enqueue\Bundle\DependencyInjection\Configuration;
66
use Enqueue\Bundle\DependencyInjection\EnqueueExtension;
77
use Enqueue\Bundle\Tests\Unit\Mocks\FooTransportFactory;
8+
use Enqueue\Bundle\Tests\Unit\Mocks\TransportFactoryWithoutDriverFactory;
89
use Enqueue\Client\Producer;
910
use Enqueue\Client\TraceableProducer;
1011
use Enqueue\Null\NullContext;
@@ -129,7 +130,10 @@ public function testShouldConfigureFooTransport()
129130
],
130131
]], $container);
131132

133+
self::assertTrue($container->hasDefinition('foo.connection_factory'));
132134
self::assertTrue($container->hasDefinition('foo.context'));
135+
self::assertFalse($container->hasDefinition('foo.driver'));
136+
133137
$context = $container->getDefinition('foo.context');
134138
self::assertEquals(\stdClass::class, $context->getClass());
135139
self::assertEquals([['foo_param' => 'aParam']], $context->getArguments());
@@ -176,10 +180,31 @@ public function testShouldLoadClientServicesWhenEnabled()
176180
],
177181
]], $container);
178182

183+
self::assertTrue($container->hasDefinition('foo.driver'));
179184
self::assertTrue($container->hasDefinition('enqueue.client.config'));
180185
self::assertTrue($container->hasDefinition('enqueue.client.producer'));
181186
}
182187

188+
public function testShouldNotCreateDriverIfFactoryDoesNotImplementDriverFactoryInterface()
189+
{
190+
$container = new ContainerBuilder();
191+
192+
$extension = new EnqueueExtension();
193+
$extension->addTransportFactory(new TransportFactoryWithoutDriverFactory());
194+
195+
$extension->load([[
196+
'client' => null,
197+
'transport' => [
198+
'default' => 'without_driver',
199+
'without_driver' => [],
200+
],
201+
]], $container);
202+
203+
self::assertTrue($container->hasDefinition('without_driver.context'));
204+
self::assertTrue($container->hasDefinition('without_driver.connection_factory'));
205+
self::assertFalse($container->hasDefinition('without_driver.driver'));
206+
}
207+
183208
public function testShouldUseProducerByDefault()
184209
{
185210
$container = new ContainerBuilder();

Diff for: ‎pkg/enqueue-bundle/Tests/Unit/Mocks/FooTransportFactory.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
namespace Enqueue\Bundle\Tests\Unit\Mocks;
44

5+
use Enqueue\Symfony\DriverFactoryInterface;
56
use Enqueue\Symfony\TransportFactoryInterface;
67
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
78
use Symfony\Component\DependencyInjection\ContainerBuilder;
89
use Symfony\Component\DependencyInjection\Definition;
910

10-
class FooTransportFactory implements TransportFactoryInterface
11+
class FooTransportFactory implements TransportFactoryInterface, DriverFactoryInterface
1112
{
1213
/**
1314
* @var string
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
3+
namespace Enqueue\Bundle\Tests\Unit\Mocks;
4+
5+
use Enqueue\Symfony\TransportFactoryInterface;
6+
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
7+
use Symfony\Component\DependencyInjection\ContainerBuilder;
8+
use Symfony\Component\DependencyInjection\Definition;
9+
10+
class TransportFactoryWithoutDriverFactory implements TransportFactoryInterface
11+
{
12+
/**
13+
* @var string
14+
*/
15+
private $name;
16+
17+
/**
18+
* @param string $name
19+
*/
20+
public function __construct($name = 'without_driver')
21+
{
22+
$this->name = $name;
23+
}
24+
25+
/**
26+
* {@inheritdoc}
27+
*/
28+
public function addConfiguration(ArrayNodeDefinition $builder)
29+
{
30+
}
31+
32+
/**
33+
* {@inheritdoc}
34+
*/
35+
public function createConnectionFactory(ContainerBuilder $container, array $config)
36+
{
37+
$factoryId = 'without_driver.connection_factory';
38+
39+
$container->setDefinition($factoryId, new Definition(\stdClass::class, [$config]));
40+
41+
return $factoryId;
42+
}
43+
44+
/**
45+
* {@inheritdoc}
46+
*/
47+
public function createContext(ContainerBuilder $container, array $config)
48+
{
49+
$contextId = 'without_driver.context';
50+
51+
$container->setDefinition($contextId, new Definition(\stdClass::class, [$config]));
52+
53+
return $contextId;
54+
}
55+
56+
public function createDriver(ContainerBuilder $container, array $config)
57+
{
58+
throw new \LogicException('It should not be called. The method will be removed');
59+
}
60+
61+
/**
62+
* {@inheritdoc}
63+
*/
64+
public function getName()
65+
{
66+
return $this->name;
67+
}
68+
}

Diff for: ‎pkg/enqueue/Symfony/DefaultTransportFactory.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
use Symfony\Component\DependencyInjection\ContainerBuilder;
1515
use function Enqueue\dsn_to_connection_factory;
1616

17-
class DefaultTransportFactory implements TransportFactoryInterface
17+
class DefaultTransportFactory implements TransportFactoryInterface, DriverFactoryInterface
1818
{
1919
/**
2020
* @var string

Diff for: ‎pkg/enqueue/Symfony/DriverFactoryInterface.php

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Enqueue\Symfony;
4+
5+
use Symfony\Component\DependencyInjection\ContainerBuilder;
6+
7+
interface DriverFactoryInterface
8+
{
9+
/**
10+
* @param ContainerBuilder $container
11+
* @param array $config
12+
*
13+
* @return string The method must return a driver service id
14+
*/
15+
public function createDriver(ContainerBuilder $container, array $config);
16+
17+
/**
18+
* @return string
19+
*/
20+
public function getName();
21+
}

Diff for: ‎pkg/enqueue/Symfony/TransportFactoryInterface.php

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public function createConnectionFactory(ContainerBuilder $container, array $conf
2929
public function createContext(ContainerBuilder $container, array $config);
3030

3131
/**
32+
* @deprecated since 0.5 will be removed in 0.6. The method will be moved to DriverFactoryInterface
33+
*
3234
* @param ContainerBuilder $container
3335
* @param array $config
3436
*

Diff for: ‎pkg/fs/Symfony/FsTransportFactory.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
use Enqueue\Fs\Client\FsDriver;
66
use Enqueue\Fs\FsConnectionFactory;
77
use Enqueue\Fs\FsContext;
8+
use Enqueue\Symfony\DriverFactoryInterface;
89
use Enqueue\Symfony\TransportFactoryInterface;
910
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
1011
use Symfony\Component\DependencyInjection\ContainerBuilder;
1112
use Symfony\Component\DependencyInjection\Definition;
1213
use Symfony\Component\DependencyInjection\Reference;
1314

14-
class FsTransportFactory implements TransportFactoryInterface
15+
class FsTransportFactory implements TransportFactoryInterface, DriverFactoryInterface
1516
{
1617
/**
1718
* @var string

Diff for: ‎pkg/null/Symfony/NullTransportFactory.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
use Enqueue\Null\Client\NullDriver;
66
use Enqueue\Null\NullConnectionFactory;
77
use Enqueue\Null\NullContext;
8+
use Enqueue\Symfony\DriverFactoryInterface;
89
use Enqueue\Symfony\TransportFactoryInterface;
910
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
1011
use Symfony\Component\DependencyInjection\ContainerBuilder;
1112
use Symfony\Component\DependencyInjection\Definition;
1213
use Symfony\Component\DependencyInjection\Reference;
1314

14-
class NullTransportFactory implements TransportFactoryInterface
15+
class NullTransportFactory implements TransportFactoryInterface, DriverFactoryInterface
1516
{
1617
/**
1718
* @var string

Diff for: ‎pkg/redis/Symfony/RedisTransportFactory.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
use Enqueue\Redis\Client\RedisDriver;
66
use Enqueue\Redis\RedisConnectionFactory;
77
use Enqueue\Redis\RedisContext;
8+
use Enqueue\Symfony\DriverFactoryInterface;
89
use Enqueue\Symfony\TransportFactoryInterface;
910
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
1011
use Symfony\Component\DependencyInjection\ContainerBuilder;
1112
use Symfony\Component\DependencyInjection\Definition;
1213
use Symfony\Component\DependencyInjection\Reference;
1314

14-
class RedisTransportFactory implements TransportFactoryInterface
15+
class RedisTransportFactory implements TransportFactoryInterface, DriverFactoryInterface
1516
{
1617
/**
1718
* @var string

Diff for: ‎pkg/sqs/Symfony/SqsTransportFactory.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
use Enqueue\Sqs\Client\SqsDriver;
66
use Enqueue\Sqs\SqsConnectionFactory;
77
use Enqueue\Sqs\SqsContext;
8+
use Enqueue\Symfony\DriverFactoryInterface;
89
use Enqueue\Symfony\TransportFactoryInterface;
910
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
1011
use Symfony\Component\DependencyInjection\ContainerBuilder;
1112
use Symfony\Component\DependencyInjection\Definition;
1213
use Symfony\Component\DependencyInjection\Reference;
1314

14-
class SqsTransportFactory implements TransportFactoryInterface
15+
class SqsTransportFactory implements TransportFactoryInterface, DriverFactoryInterface
1516
{
1617
/**
1718
* @var string

Diff for: ‎pkg/stomp/Symfony/StompTransportFactory.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
use Enqueue\Stomp\Client\StompDriver;
66
use Enqueue\Stomp\StompConnectionFactory;
77
use Enqueue\Stomp\StompContext;
8+
use Enqueue\Symfony\DriverFactoryInterface;
89
use Enqueue\Symfony\TransportFactoryInterface;
910
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
1011
use Symfony\Component\DependencyInjection\ContainerBuilder;
1112
use Symfony\Component\DependencyInjection\Definition;
1213
use Symfony\Component\DependencyInjection\Reference;
1314

14-
class StompTransportFactory implements TransportFactoryInterface
15+
class StompTransportFactory implements TransportFactoryInterface, DriverFactoryInterface
1516
{
1617
/**
1718
* @var string

0 commit comments

Comments
 (0)