Skip to content

Commit 6afffd3

Browse files
authored
Merge pull request #933 from Lctrs/reset-doctrineodm
Add a service to reset doctrine/odm identity maps
2 parents 4f5be8e + b4a909c commit 6afffd3

File tree

8 files changed

+112
-1
lines changed

8 files changed

+112
-1
lines changed

composer.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
"symfony/framework-bundle": "^3.4|^4",
5757
"empi89/php-amqp-stubs": "*@dev",
5858
"doctrine/doctrine-bundle": "~1.2",
59+
"doctrine/mongodb-odm-bundle": "^3.5",
60+
"alcaeus/mongo-php-adapter": "^1.0",
5961
"kwn/php-rdkafka-stubs": "^1.0.2",
6062
"friendsofphp/php-cs-fixer": "^2"
6163
},
@@ -112,7 +114,8 @@
112114
"ext-rdkafka": "3.3",
113115
"ext-mongodb": "1.3",
114116
"ext-bcmath": "1",
115-
"ext-mbstring": "1"
117+
"ext-mbstring": "1",
118+
"ext-mongo": "1.6.14"
116119
},
117120
"prefer-stable": true
118121
}

docs/bundle/config_reference.md

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ enqueue:
6969
extensions:
7070
doctrine_ping_connection_extension: false
7171
doctrine_clear_identity_map_extension: false
72+
doctrine_odm_clear_identity_map_extension: false
7273
reset_services_extension: false
7374
signal_extension: true
7475
reply_extension: true

pkg/enqueue-bundle/DependencyInjection/Configuration.php

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public function getConfigTreeBuilder(): TreeBuilder
4747
->arrayNode('extensions')->addDefaultsIfNotSet()->children()
4848
->booleanNode('doctrine_ping_connection_extension')->defaultFalse()->end()
4949
->booleanNode('doctrine_clear_identity_map_extension')->defaultFalse()->end()
50+
->booleanNode('doctrine_odm_clear_identity_map_extension')->defaultFalse()->end()
5051
->booleanNode('reset_services_extension')->defaultFalse()->end()
5152
->booleanNode('signal_extension')->defaultValue(function_exists('pcntl_signal_dispatch'))->end()
5253
->booleanNode('reply_extension')->defaultTrue()->end()

pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php

+24
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ public function load(array $configs, ContainerBuilder $container): void
137137
// extensions
138138
$this->loadDoctrinePingConnectionExtension($config, $container);
139139
$this->loadDoctrineClearIdentityMapExtension($config, $container);
140+
$this->loadDoctrineOdmClearIdentityMapExtension($config, $container);
140141
$this->loadResetServicesExtension($config, $container);
141142
$this->loadSignalExtension($config, $container);
142143
$this->loadReplyExtension($config, $container);
@@ -249,6 +250,29 @@ private function loadDoctrineClearIdentityMapExtension(array $config, ContainerB
249250
}
250251
}
251252

253+
private function loadDoctrineOdmClearIdentityMapExtension(array $config, ContainerBuilder $container): void
254+
{
255+
$configNames = [];
256+
foreach ($config as $name => $modules) {
257+
if ($modules['extensions']['doctrine_odm_clear_identity_map_extension']) {
258+
$configNames[] = $name;
259+
}
260+
}
261+
262+
if ([] === $configNames) {
263+
return;
264+
}
265+
266+
$extension = $container->register('enqueue.consumption.doctrine_odm_clear_identity_map_extension', DoctrineClearIdentityMapExtension::class)
267+
->addArgument(new Reference('doctrine_mongodb'))
268+
;
269+
270+
foreach ($configNames as $name) {
271+
$extension->addTag('enqueue.consumption_extension', ['client' => $name]);
272+
$extension->addTag('enqueue.transport.consumption_extension', ['transport' => $name]);
273+
}
274+
}
275+
252276
private function loadResetServicesExtension(array $config, ContainerBuilder $container)
253277
{
254278
$configNames = [];

pkg/enqueue-bundle/Tests/Unit/DependencyInjection/ConfigurationTest.php

+43
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,49 @@ public function testDoctrineClearIdentityMapExtensionCouldBeEnabled()
336336
], $config);
337337
}
338338

339+
public function testDoctrineOdmClearIdentityMapExtensionShouldBeDisabledByDefault()
340+
{
341+
$configuration = new Configuration(true);
342+
343+
$processor = new Processor();
344+
$config = $processor->processConfiguration($configuration, [[
345+
'default' => [
346+
'transport' => null,
347+
],
348+
]]);
349+
350+
$this->assertArraySubset([
351+
'default' => [
352+
'extensions' => [
353+
'doctrine_odm_clear_identity_map_extension' => false,
354+
],
355+
],
356+
], $config);
357+
}
358+
359+
public function testDoctrineOdmClearIdentityMapExtensionCouldBeEnabled()
360+
{
361+
$configuration = new Configuration(true);
362+
363+
$processor = new Processor();
364+
$config = $processor->processConfiguration($configuration, [[
365+
'default' => [
366+
'transport' => [],
367+
'extensions' => [
368+
'doctrine_odm_clear_identity_map_extension' => true,
369+
],
370+
],
371+
]]);
372+
373+
$this->assertArraySubset([
374+
'default' => [
375+
'extensions' => [
376+
'doctrine_odm_clear_identity_map_extension' => true,
377+
],
378+
],
379+
], $config);
380+
}
381+
339382
public function testResetServicesExtensionShouldBeDisabledByDefault()
340383
{
341384
$configuration = new Configuration(true);

pkg/enqueue-bundle/Tests/Unit/DependencyInjection/EnqueueExtensionTest.php

+36
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,42 @@ public function testShouldNotLoadDoctrineClearIdentityMapExtensionServiceIfDisab
384384
self::assertFalse($container->hasDefinition('enqueue.consumption.doctrine_clear_identity_map_extension'));
385385
}
386386

387+
public function testShouldLoadDoctrineOdmClearIdentityMapExtensionServiceIfEnabled()
388+
{
389+
$container = $this->getContainerBuilder(true);
390+
391+
$extension = new EnqueueExtension();
392+
393+
$extension->load([[
394+
'default' => [
395+
'transport' => [],
396+
'extensions' => [
397+
'doctrine_odm_clear_identity_map_extension' => true,
398+
],
399+
],
400+
]], $container);
401+
402+
self::assertTrue($container->hasDefinition('enqueue.consumption.doctrine_odm_clear_identity_map_extension'));
403+
}
404+
405+
public function testShouldNotLoadDoctrineOdmClearIdentityMapExtensionServiceIfDisabled()
406+
{
407+
$container = $this->getContainerBuilder(true);
408+
409+
$extension = new EnqueueExtension();
410+
411+
$extension->load([[
412+
'default' => [
413+
'transport' => [],
414+
'extensions' => [
415+
'doctrine_odm_clear_identity_map_extension' => false,
416+
],
417+
],
418+
]], $container);
419+
420+
self::assertFalse($container->hasDefinition('enqueue.consumption.doctrine_odm_clear_identity_map_extension'));
421+
}
422+
387423
public function testShouldLoadResetServicesExtensionServiceIfEnabled()
388424
{
389425
$container = $this->getContainerBuilder(true);

pkg/enqueue-bundle/Tests/fix_composer_json.php

+1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
$composerJson = json_decode(file_get_contents(__DIR__.'/../composer.json'), true);
66

77
$composerJson['config']['platform']['ext-amqp'] = '1.9.3';
8+
$composerJson['config']['platform']['ext-mongo'] = '1.6.14';
89

910
file_put_contents(__DIR__.'/../composer.json', json_encode($composerJson, JSON_PRETTY_PRINT));

pkg/enqueue-bundle/composer.json

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
"enqueue/async-command": "0.9.x-dev",
3838
"php-amqplib/php-amqplib": "^2.7",
3939
"doctrine/doctrine-bundle": "~1.2",
40+
"doctrine/mongodb-odm-bundle": "^3.5",
41+
"alcaeus/mongo-php-adapter": "^1.0",
4042
"symfony/browser-kit": "^3.4|^4",
4143
"symfony/expression-language": "^3.4|^4"
4244
},

0 commit comments

Comments
 (0)