Skip to content

Commit

Permalink
Merge pull request #22 from temp/fix/services
Browse files Browse the repository at this point in the history
fix: Switch to yaml configs, switch to class based service IDs, add m…
  • Loading branch information
jojoguru authored Jul 21, 2023
2 parents 615db67 + f94a6f4 commit 1b46361
Show file tree
Hide file tree
Showing 18 changed files with 90 additions and 132 deletions.
12 changes: 6 additions & 6 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@
"phpunit/phpunit": "^10.1",
"predis/predis": "^2.2",
"symfony/clock": "^6.3",
"symfony/config": "^6.0",
"symfony/dependency-injection": "^6.0",
"symfony/http-foundation": "^6.0",
"symfony/http-kernel": "^6.0",
"symfony/routing": "^6.0",
"symfony/security-core": "^6.0",
"symfony/config": "^6.3",
"symfony/dependency-injection": "^6.3",
"symfony/http-foundation": "^6.3",
"symfony/http-kernel": "^6.3",
"symfony/routing": "^6.3",
"symfony/security-core": "^6.3",
"phpstan/phpstan-phpunit": "^1.3",
"phpstan/phpstan-symfony": "^1.3"
},
Expand Down
20 changes: 12 additions & 8 deletions src/Bundle/DependencyInjection/BrainbitsBlockingExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@

namespace Brainbits\Blocking\Bundle\DependencyInjection;

use Brainbits\Blocking\Owner\OwnerFactoryInterface;
use Brainbits\Blocking\Storage\StorageInterface;
use InvalidArgumentException;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;

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

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

if (isset($config['predis'])) {
$container->setAlias('brainbits_blocking.predis', $config['predis']);
if (isset($config['storage']['predis'])) {
$container->setAlias('brainbits_blocking.predis', $config['storage']['predis']);
}

if (isset($config['clock'])) {
$container->setAlias('brainbits_blocking.clock', $config['clock']);
}

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

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

if ($config['owner_factory']['driver'] !== 'custom') {
$xmlLoader->load(sprintf('owner_factory/%s.xml', $config['owner_factory']['driver']));
$yamlLoader->load(sprintf('owner_factory/%s.yaml', $config['owner_factory']['driver']));
} else {
$container->setAlias('brainbits_blocking.owner_factory', $config['owner_factory']['service']);
$container->setAlias(OwnerFactoryInterface::class, $config['owner_factory']['service']);
}
}
}
11 changes: 8 additions & 3 deletions src/Bundle/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,20 @@ public function getConfigTreeBuilder(): TreeBuilder
return false;
}

return ($v['predis'] ?? '') === '';
return ($v['storage']['predis'] ?? '') === '';
})
->thenInvalid(
'A predis alias has to be set for the predis storage driver.',
)
->end()
->children()
->integerNode('block_interval')->defaultValue(30)->end()
->scalarNode('clock')->end()
->scalarNode('predis')->end()
->scalarNode('clock')
->validate()
->ifEmpty()
->thenInvalid('Clock service is required.')
->end()
->end()
->arrayNode('storage')
->addDefaultsIfNotSet()
->children()
Expand All @@ -64,6 +68,7 @@ public function getConfigTreeBuilder(): TreeBuilder
->end()
->scalarNode('service')->end()
->scalarNode('storage_dir')->defaultValue('%kernel.cache_dir%/blocking/')->end()
->scalarNode('predis')->end()
->scalarNode('prefix')->defaultValue('block')->end()
->end()
->end()
Expand Down
15 changes: 0 additions & 15 deletions src/Bundle/Resources/config/owner_factory/symfony_session.xml

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
services:
Brainbits\Blocking\Owner\OwnerFactoryInterface:
class: Brainbits\Blocking\Owner\SymfonySessionOwnerFactory
arguments:
- '@\Symfony\Component\HttpFoundation\RequestStack'
15 changes: 0 additions & 15 deletions src/Bundle/Resources/config/owner_factory/symfony_token.xml

This file was deleted.

5 changes: 5 additions & 0 deletions src/Bundle/Resources/config/owner_factory/symfony_token.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
services:
Brainbits\Blocking\Owner\OwnerFactoryInterface:
class: Brainbits\Blocking\Owner\SymfonyTokenOwnerFactory
arguments:
- '@Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface'
15 changes: 0 additions & 15 deletions src/Bundle/Resources/config/owner_factory/value.xml

This file was deleted.

5 changes: 5 additions & 0 deletions src/Bundle/Resources/config/owner_factory/value.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
services:
Brainbits\Blocking\Owner\OwnerFactoryInterface:
class: Brainbits\Blocking\Owner\ValueOwnerFactory
arguments:
- "%brainbits_blocking.owner_factory.value%"
17 changes: 5 additions & 12 deletions src/Bundle/Resources/config/services.yaml
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
services:
brainbits_blocking.filesystem_storage:
class: Brainbits\Blocking\Storage\FilesystemStorage
Brainbits\Blocking\Blocker:
arguments:
- '%kernel.cache_dir%/blocks/'

brainbits_blocking.blocker:
class: Brainbits\Blocking\Blocker
arguments:
- '@brainbits_blocking.storage'
- '@brainbits_blocking.owner_factory'
- '@Brainbits\Blocking\Storage\StorageInterface'
- '@Brainbits\Blocking\Owner\OwnerFactoryInterface'


brainbits_blocking.controller:
class: Brainbits\Blocking\Bundle\Controller\BlockingController
Brainbits\Blocking\Bundle\Controller\BlockingController:
tags: ['controller.service_arguments']
arguments:
- '@brainbits_blocking.blocker'
- '@Brainbits\Blocking\Blocker'

16 changes: 0 additions & 16 deletions src/Bundle/Resources/config/storage/filesystem.xml

This file was deleted.

8 changes: 8 additions & 0 deletions src/Bundle/Resources/config/storage/filesystem.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
services:
Brainbits\Blocking\Storage\StorageInterface:
alias: Brainbits\Blocking\Storage\FilesystemStorage

Brainbits\Blocking\Storage\FilesystemStorage:
arguments:
- "@brainbits_blocking.clock"
- "%brainbits_blocking.storage.storage_dir%"
13 changes: 0 additions & 13 deletions src/Bundle/Resources/config/storage/in_memory.xml

This file was deleted.

7 changes: 7 additions & 0 deletions src/Bundle/Resources/config/storage/in_memory.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
services:
Brainbits\Blocking\Storage\StorageInterface:
alias: Brainbits\Blocking\Storage\InMemoryStorage

Brainbits\Blocking\Storage\InMemoryStorage:
arguments:
- "@brainbits_blocking.clock"
16 changes: 0 additions & 16 deletions src/Bundle/Resources/config/storage/predis.xml

This file was deleted.

8 changes: 8 additions & 0 deletions src/Bundle/Resources/config/storage/predis.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
services:
Brainbits\Blocking\Storage\StorageInterface:
alias: Brainbits\Blocking\Storage\PredisStorage

Brainbits\Blocking\Storage\PredisStorage:
arguments:
- "@brainbits_blocking.predis"
- "%brainbits_blocking.storage.prefix%"
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@
namespace Brainbits\Blocking\Bundle\Tests\DependencyInjection;

use Brainbits\Blocking\Bundle\DependencyInjection\BrainbitsBlockingExtension;
use Brainbits\Blocking\Owner\OwnerFactoryInterface;
use Brainbits\Blocking\Owner\SymfonySessionOwnerFactory;
use Brainbits\Blocking\Owner\ValueOwnerFactory;
use Brainbits\Blocking\Storage\FilesystemStorage;
use Brainbits\Blocking\Storage\InMemoryStorage;
use Brainbits\Blocking\Storage\StorageInterface;
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
use Symfony\Component\DependencyInjection\Extension\Extension;

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

$this->assertContainerBuilderHasService('brainbits_blocking.storage', FilesystemStorage::class);
$this->assertContainerBuilderHasService('brainbits_blocking.owner_factory', SymfonySessionOwnerFactory::class);
$this->assertContainerBuilderHasService(FilesystemStorage::class);
$this->assertContainerBuilderHasAlias(StorageInterface::class, FilesystemStorage::class);
$this->assertContainerBuilderHasService(OwnerFactoryInterface::class, SymfonySessionOwnerFactory::class);
$this->assertContainerBuilderHasParameter('brainbits_blocking.interval', 30);
}

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

$this->assertContainerBuilderHasService('brainbits_blocking.storage', InMemoryStorage::class);
$this->assertContainerBuilderHasService('brainbits_blocking.owner_factory', ValueOwnerFactory::class);
$this->assertContainerBuilderHasService(InMemoryStorage::class);
$this->assertContainerBuilderHasAlias(StorageInterface::class, InMemoryStorage::class);
$this->assertContainerBuilderHasService(OwnerFactoryInterface::class, ValueOwnerFactory::class);
$this->assertContainerBuilderHasParameter('brainbits_blocking.interval', 9);
}

Expand All @@ -63,14 +67,16 @@ public function testCustomStorageService(): void
],
]);

$this->assertContainerBuilderHasAlias('brainbits_blocking.storage', 'foo');
$this->assertContainerBuilderHasAlias(StorageInterface::class, 'foo');
}

public function testPredisStorage(): void
{
$this->load([
'predis' => 'my_predis',
'storage' => ['driver' => 'predis'],
'storage' => [
'driver' => 'predis',
'predis' => 'my_predis',
],
]);

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

$this->assertContainerBuilderHasAlias('brainbits_blocking.owner_factory', 'bar');
$this->assertContainerBuilderHasAlias(OwnerFactoryInterface::class, 'bar');
}
}
12 changes: 7 additions & 5 deletions tests/Bundle/DependencyInjection/ConfigurationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,11 @@ public function testProvidedValues(): void
$this->assertProcessedConfigurationEquals(
[
[
'predis' => 'foo',
'storage' => [
'driver' => 'in_memory',
'storage_dir' => 'foo',
'prefix' => 'block',
'predis' => 'foo',
],
'owner_factory' => [
'driver' => 'value',
Expand All @@ -78,13 +78,13 @@ public function testProvidedValues(): void
'driver' => 'in_memory',
'storage_dir' => 'foo',
'prefix' => 'block',
'predis' => 'foo',
],
'owner_factory' => [
'driver' => 'value',
'value' => 'bar',
],
'block_interval' => 88,
'predis' => 'foo',
],
);
}
Expand Down Expand Up @@ -164,19 +164,21 @@ public function testPredisAlias(): void
$this->assertProcessedConfigurationEquals(
[
[
'predis' => 'my_predis',
'storage' => ['driver' => 'predis'],
'storage' => [
'driver' => 'predis',
'predis' => 'my_predis',
],
],
],
[
'storage' => [
'driver' => 'predis',
'storage_dir' => '%kernel.cache_dir%/blocking/',
'prefix' => 'block',
'predis' => 'my_predis',
],
'owner_factory' => ['driver' => 'symfony_session'],
'block_interval' => 30,
'predis' => 'my_predis',
],
);
}
Expand Down

0 comments on commit 1b46361

Please sign in to comment.