Skip to content

Commit 1b46361

Browse files
authored
Merge pull request #22 from temp/fix/services
fix: Switch to yaml configs, switch to class based service IDs, add m…
2 parents 615db67 + f94a6f4 commit 1b46361

18 files changed

+90
-132
lines changed

composer.json

+6-6
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@
2424
"phpunit/phpunit": "^10.1",
2525
"predis/predis": "^2.2",
2626
"symfony/clock": "^6.3",
27-
"symfony/config": "^6.0",
28-
"symfony/dependency-injection": "^6.0",
29-
"symfony/http-foundation": "^6.0",
30-
"symfony/http-kernel": "^6.0",
31-
"symfony/routing": "^6.0",
32-
"symfony/security-core": "^6.0",
27+
"symfony/config": "^6.3",
28+
"symfony/dependency-injection": "^6.3",
29+
"symfony/http-foundation": "^6.3",
30+
"symfony/http-kernel": "^6.3",
31+
"symfony/routing": "^6.3",
32+
"symfony/security-core": "^6.3",
3333
"phpstan/phpstan-phpunit": "^1.3",
3434
"phpstan/phpstan-symfony": "^1.3"
3535
},

src/Bundle/DependencyInjection/BrainbitsBlockingExtension.php

+12-8
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@
1313

1414
namespace Brainbits\Blocking\Bundle\DependencyInjection;
1515

16+
use Brainbits\Blocking\Owner\OwnerFactoryInterface;
17+
use Brainbits\Blocking\Storage\StorageInterface;
1618
use InvalidArgumentException;
1719
use Symfony\Component\Config\FileLocator;
1820
use Symfony\Component\DependencyInjection\ContainerBuilder;
19-
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
2021
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
2122
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
2223

@@ -27,7 +28,6 @@ class BrainbitsBlockingExtension extends Extension
2728
/** @param array<int, mixed> $configs */
2829
public function load(array $configs, ContainerBuilder $container): void
2930
{
30-
$xmlLoader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
3131
$yamlLoader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
3232
$yamlLoader->load('services.yaml');
3333
$configuration = $this->getConfiguration($configs, $container);
@@ -39,8 +39,12 @@ public function load(array $configs, ContainerBuilder $container): void
3939

4040
$config = $this->processConfiguration($configuration, $configs);
4141

42-
if (isset($config['predis'])) {
43-
$container->setAlias('brainbits_blocking.predis', $config['predis']);
42+
if (isset($config['storage']['predis'])) {
43+
$container->setAlias('brainbits_blocking.predis', $config['storage']['predis']);
44+
}
45+
46+
if (isset($config['clock'])) {
47+
$container->setAlias('brainbits_blocking.clock', $config['clock']);
4448
}
4549

4650
$container->setParameter('brainbits_blocking.interval', $config['block_interval']);
@@ -67,15 +71,15 @@ public function load(array $configs, ContainerBuilder $container): void
6771
}
6872

6973
if ($config['storage']['driver'] !== 'custom') {
70-
$xmlLoader->load(sprintf('storage/%s.xml', $config['storage']['driver']));
74+
$yamlLoader->load(sprintf('storage/%s.yaml', $config['storage']['driver']));
7175
} else {
72-
$container->setAlias('brainbits_blocking.storage', $config['storage']['service']);
76+
$container->setAlias(StorageInterface::class, $config['storage']['service']);
7377
}
7478

7579
if ($config['owner_factory']['driver'] !== 'custom') {
76-
$xmlLoader->load(sprintf('owner_factory/%s.xml', $config['owner_factory']['driver']));
80+
$yamlLoader->load(sprintf('owner_factory/%s.yaml', $config['owner_factory']['driver']));
7781
} else {
78-
$container->setAlias('brainbits_blocking.owner_factory', $config['owner_factory']['service']);
82+
$container->setAlias(OwnerFactoryInterface::class, $config['owner_factory']['service']);
7983
}
8084
}
8185
}

src/Bundle/DependencyInjection/Configuration.php

+8-3
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,20 @@ public function getConfigTreeBuilder(): TreeBuilder
3838
return false;
3939
}
4040

41-
return ($v['predis'] ?? '') === '';
41+
return ($v['storage']['predis'] ?? '') === '';
4242
})
4343
->thenInvalid(
4444
'A predis alias has to be set for the predis storage driver.',
4545
)
4646
->end()
4747
->children()
4848
->integerNode('block_interval')->defaultValue(30)->end()
49-
->scalarNode('clock')->end()
50-
->scalarNode('predis')->end()
49+
->scalarNode('clock')
50+
->validate()
51+
->ifEmpty()
52+
->thenInvalid('Clock service is required.')
53+
->end()
54+
->end()
5155
->arrayNode('storage')
5256
->addDefaultsIfNotSet()
5357
->children()
@@ -64,6 +68,7 @@ public function getConfigTreeBuilder(): TreeBuilder
6468
->end()
6569
->scalarNode('service')->end()
6670
->scalarNode('storage_dir')->defaultValue('%kernel.cache_dir%/blocking/')->end()
71+
->scalarNode('predis')->end()
6772
->scalarNode('prefix')->defaultValue('block')->end()
6873
->end()
6974
->end()

src/Bundle/Resources/config/owner_factory/symfony_session.xml

-15
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
services:
2+
Brainbits\Blocking\Owner\OwnerFactoryInterface:
3+
class: Brainbits\Blocking\Owner\SymfonySessionOwnerFactory
4+
arguments:
5+
- '@\Symfony\Component\HttpFoundation\RequestStack'

src/Bundle/Resources/config/owner_factory/symfony_token.xml

-15
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
services:
2+
Brainbits\Blocking\Owner\OwnerFactoryInterface:
3+
class: Brainbits\Blocking\Owner\SymfonyTokenOwnerFactory
4+
arguments:
5+
- '@Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface'

src/Bundle/Resources/config/owner_factory/value.xml

-15
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
services:
2+
Brainbits\Blocking\Owner\OwnerFactoryInterface:
3+
class: Brainbits\Blocking\Owner\ValueOwnerFactory
4+
arguments:
5+
- "%brainbits_blocking.owner_factory.value%"
+5-12
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
11
services:
2-
brainbits_blocking.filesystem_storage:
3-
class: Brainbits\Blocking\Storage\FilesystemStorage
2+
Brainbits\Blocking\Blocker:
43
arguments:
5-
- '%kernel.cache_dir%/blocks/'
6-
7-
brainbits_blocking.blocker:
8-
class: Brainbits\Blocking\Blocker
9-
arguments:
10-
- '@brainbits_blocking.storage'
11-
- '@brainbits_blocking.owner_factory'
4+
- '@Brainbits\Blocking\Storage\StorageInterface'
5+
- '@Brainbits\Blocking\Owner\OwnerFactoryInterface'
126

137

14-
brainbits_blocking.controller:
15-
class: Brainbits\Blocking\Bundle\Controller\BlockingController
8+
Brainbits\Blocking\Bundle\Controller\BlockingController:
169
tags: ['controller.service_arguments']
1710
arguments:
18-
- '@brainbits_blocking.blocker'
11+
- '@Brainbits\Blocking\Blocker'
1912

src/Bundle/Resources/config/storage/filesystem.xml

-16
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
services:
2+
Brainbits\Blocking\Storage\StorageInterface:
3+
alias: Brainbits\Blocking\Storage\FilesystemStorage
4+
5+
Brainbits\Blocking\Storage\FilesystemStorage:
6+
arguments:
7+
- "@brainbits_blocking.clock"
8+
- "%brainbits_blocking.storage.storage_dir%"

src/Bundle/Resources/config/storage/in_memory.xml

-13
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
services:
2+
Brainbits\Blocking\Storage\StorageInterface:
3+
alias: Brainbits\Blocking\Storage\InMemoryStorage
4+
5+
Brainbits\Blocking\Storage\InMemoryStorage:
6+
arguments:
7+
- "@brainbits_blocking.clock"

src/Bundle/Resources/config/storage/predis.xml

-16
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
services:
2+
Brainbits\Blocking\Storage\StorageInterface:
3+
alias: Brainbits\Blocking\Storage\PredisStorage
4+
5+
Brainbits\Blocking\Storage\PredisStorage:
6+
arguments:
7+
- "@brainbits_blocking.predis"
8+
- "%brainbits_blocking.storage.prefix%"

tests/Bundle/DependencyInjection/BrainbitsBlockingExtensionTest.php

+14-8
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
namespace Brainbits\Blocking\Bundle\Tests\DependencyInjection;
1515

1616
use Brainbits\Blocking\Bundle\DependencyInjection\BrainbitsBlockingExtension;
17+
use Brainbits\Blocking\Owner\OwnerFactoryInterface;
1718
use Brainbits\Blocking\Owner\SymfonySessionOwnerFactory;
1819
use Brainbits\Blocking\Owner\ValueOwnerFactory;
1920
use Brainbits\Blocking\Storage\FilesystemStorage;
2021
use Brainbits\Blocking\Storage\InMemoryStorage;
22+
use Brainbits\Blocking\Storage\StorageInterface;
2123
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
2224
use Symfony\Component\DependencyInjection\Extension\Extension;
2325

@@ -33,8 +35,9 @@ public function testContainerHasDefaultParameters(): void
3335
{
3436
$this->load();
3537

36-
$this->assertContainerBuilderHasService('brainbits_blocking.storage', FilesystemStorage::class);
37-
$this->assertContainerBuilderHasService('brainbits_blocking.owner_factory', SymfonySessionOwnerFactory::class);
38+
$this->assertContainerBuilderHasService(FilesystemStorage::class);
39+
$this->assertContainerBuilderHasAlias(StorageInterface::class, FilesystemStorage::class);
40+
$this->assertContainerBuilderHasService(OwnerFactoryInterface::class, SymfonySessionOwnerFactory::class);
3841
$this->assertContainerBuilderHasParameter('brainbits_blocking.interval', 30);
3942
}
4043

@@ -49,8 +52,9 @@ public function testContainerHasCustomParameters(): void
4952
'block_interval' => 9,
5053
]);
5154

52-
$this->assertContainerBuilderHasService('brainbits_blocking.storage', InMemoryStorage::class);
53-
$this->assertContainerBuilderHasService('brainbits_blocking.owner_factory', ValueOwnerFactory::class);
55+
$this->assertContainerBuilderHasService(InMemoryStorage::class);
56+
$this->assertContainerBuilderHasAlias(StorageInterface::class, InMemoryStorage::class);
57+
$this->assertContainerBuilderHasService(OwnerFactoryInterface::class, ValueOwnerFactory::class);
5458
$this->assertContainerBuilderHasParameter('brainbits_blocking.interval', 9);
5559
}
5660

@@ -63,14 +67,16 @@ public function testCustomStorageService(): void
6367
],
6468
]);
6569

66-
$this->assertContainerBuilderHasAlias('brainbits_blocking.storage', 'foo');
70+
$this->assertContainerBuilderHasAlias(StorageInterface::class, 'foo');
6771
}
6872

6973
public function testPredisStorage(): void
7074
{
7175
$this->load([
72-
'predis' => 'my_predis',
73-
'storage' => ['driver' => 'predis'],
76+
'storage' => [
77+
'driver' => 'predis',
78+
'predis' => 'my_predis',
79+
],
7480
]);
7581

7682
$this->assertContainerBuilderHasAlias('brainbits_blocking.predis', 'my_predis');
@@ -85,6 +91,6 @@ public function testCustomOwnerService(): void
8591
],
8692
]);
8793

88-
$this->assertContainerBuilderHasAlias('brainbits_blocking.owner_factory', 'bar');
94+
$this->assertContainerBuilderHasAlias(OwnerFactoryInterface::class, 'bar');
8995
}
9096
}

tests/Bundle/DependencyInjection/ConfigurationTest.php

+7-5
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ public function testProvidedValues(): void
6060
$this->assertProcessedConfigurationEquals(
6161
[
6262
[
63-
'predis' => 'foo',
6463
'storage' => [
6564
'driver' => 'in_memory',
6665
'storage_dir' => 'foo',
6766
'prefix' => 'block',
67+
'predis' => 'foo',
6868
],
6969
'owner_factory' => [
7070
'driver' => 'value',
@@ -78,13 +78,13 @@ public function testProvidedValues(): void
7878
'driver' => 'in_memory',
7979
'storage_dir' => 'foo',
8080
'prefix' => 'block',
81+
'predis' => 'foo',
8182
],
8283
'owner_factory' => [
8384
'driver' => 'value',
8485
'value' => 'bar',
8586
],
8687
'block_interval' => 88,
87-
'predis' => 'foo',
8888
],
8989
);
9090
}
@@ -164,19 +164,21 @@ public function testPredisAlias(): void
164164
$this->assertProcessedConfigurationEquals(
165165
[
166166
[
167-
'predis' => 'my_predis',
168-
'storage' => ['driver' => 'predis'],
167+
'storage' => [
168+
'driver' => 'predis',
169+
'predis' => 'my_predis',
170+
],
169171
],
170172
],
171173
[
172174
'storage' => [
173175
'driver' => 'predis',
174176
'storage_dir' => '%kernel.cache_dir%/blocking/',
175177
'prefix' => 'block',
178+
'predis' => 'my_predis',
176179
],
177180
'owner_factory' => ['driver' => 'symfony_session'],
178181
'block_interval' => 30,
179-
'predis' => 'my_predis',
180182
],
181183
);
182184
}

0 commit comments

Comments
 (0)