Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ Latest
------

### Changes
* [#65](https://github.com/cleverage/cache-process-bundle/issues/65) Configuring a key under `clever_age_cache_process` is deprecated: the bundle has no configuration and the keys were ignored without notice (new internal `Configuration`, empty; notice when the container is compiled). They will be rejected in 3.0. Require `symfony/deprecation-contracts`, used directly. Update documentation, add tests.
* [#63](https://github.com/cleverage/cache-process-bundle/issues/63) The bundle throws exceptions implementing `ProcessExceptionInterface` of the process bundle instead of raw SPL exceptions (as [cleverage/process-bundle#317](https://github.com/cleverage/process-bundle/issues/317)): new `Exception\UnexpectedValueException`, extending the SPL exceptions thrown before (same messages, the existing `catch` keep working). `MissingAdapterException` implements `ProcessExceptionInterface`. Add tests.
* [#61](https://github.com/cleverage/cache-process-bundle/issues/61) Composer: require PHP `^8.2` instead of `>=8.2` (PHP 9 is no longer accepted before being tested), remove the authorization of the `symfony/flex` plugin, which is not required (the CI installs it globally), as [cleverage/process-bundle#319](https://github.com/cleverage/process-bundle/issues/319).
* [#56](https://github.com/cleverage/cache-process-bundle/issues/56) Define the public API (Symfony BC promise, as [cleverage/process-bundle#279](https://github.com/cleverage/process-bundle/issues/279)): `GetTask`, `SetTask`, `AdapterRegistry` and `CleverAgeCacheProcessBundle` are marked `@final since 2.3`, they will be `final` in 3.0: extending them triggers a deprecation with the Symfony `DebugClassLoader`. `AbstractCacheTask`, `Adapter` (extended by the applications) and `MissingAdapterException` stay open. `CleverAgeCacheProcessExtension` and `RegisterAdaptersPass` are marked `@internal`.
Expand Down
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
"symfony/cache": "^6.4 || ^7.4 || ^8",
"symfony/config": "^6.4 || ^7.4 || ^8",
"symfony/dependency-injection": "^6.4 || ^7.4 || ^8",
"symfony/deprecation-contracts": "^2.5 || ^3",
"symfony/http-kernel": "^6.4 || ^7.4 || ^8",
"symfony/options-resolver": "^6.4 || ^7.4 || ^8",
"symfony/polyfill-php83": "^1.33",
Expand Down
2 changes: 2 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ services:
- { name: cleverage.cache.adapter, code: app }
```

No option can be configured under `clever_age_cache_process`: a key there is ignored. Configuring one is deprecated since 2.3 (an `E_USER_DEPRECATED` error is triggered when the container is compiled), the keys will be rejected in 3.0.

## Custom cache tasks

`CleverAge\CacheProcessBundle\Task\AbstractCacheTask` can be extended to implement other cache operations. It extends
Expand Down
12 changes: 12 additions & 0 deletions src/DependencyInjection/CleverAgeCacheProcessExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,18 @@ class CleverAgeCacheProcessExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container): void
{
$keys = array_keys(array_merge(...$configs));
if ([] !== $keys) {
trigger_deprecation(
'cleverage/cache-process-bundle',
'2.3',
'Configuring "%s" is deprecated, the bundle has no configuration: the keys "%s" are ignored. They will be rejected in 3.0.',
$this->getAlias(),
implode('", "', $keys),
);
}
$this->processConfiguration(new Configuration(), $configs);

$this->findServices($container, __DIR__.'/../../config/services');

$container->registerAttributeForAutoconfiguration(
Expand Down
37 changes: 37 additions & 0 deletions src/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

declare(strict_types=1);

/*
* This file is part of the CleverAge/CacheProcessBundle package.
*
* Copyright (c) Clever-Age
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace CleverAge\CacheProcessBundle\DependencyInjection;

use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

/**
* The bundle has no option: the configured keys are ignored with a deprecation (see CleverAgeCacheProcessExtension::load()), they will be
* rejected in 3.0.
*
* @internal
*/
final class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder(): TreeBuilder
{
$treeBuilder = new TreeBuilder('clever_age_cache_process');
/** @var ArrayNodeDefinition $rootNode */
$rootNode = $treeBuilder->getRootNode();
$rootNode->ignoreExtraKeys();

return $treeBuilder;
}
}
50 changes: 50 additions & 0 deletions tests/DependencyInjection/CleverAgeCacheProcessExtensionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

use CleverAge\CacheProcessBundle\Attribute\AsCacheAdapter;
use CleverAge\CacheProcessBundle\DependencyInjection\CleverAgeCacheProcessExtension;
use CleverAge\CacheProcessBundle\DependencyInjection\Configuration;
use CleverAge\CacheProcessBundle\Registry\AdapterRegistry;
use CleverAge\CacheProcessBundle\Task\GetTask;
use CleverAge\CacheProcessBundle\Task\SetTask;
Expand All @@ -32,6 +33,7 @@
use Symfony\Component\Yaml\Yaml;

#[CoversClass(CleverAgeCacheProcessExtension::class)]
#[CoversClass(Configuration::class)]
#[UsesClass(AdapterRegistry::class)]
#[CoversClass(AsCacheAdapter::class)]
class CleverAgeCacheProcessExtensionTest extends TestCase
Expand Down Expand Up @@ -149,6 +151,54 @@ public function testTaskIsRegistered(string $class, string $code, string $deprec
$alias->getDeprecation($deprecatedId)
);
}

public function testConfigurationKeysAreDeprecated(): void
{
$deprecations = $this->collectDeprecations(static function (): void {
(new CleverAgeCacheProcessExtension())->load([[], ['foo' => true], ['bar' => 1, 'foo' => false]], new ContainerBuilder());
});

self::assertSame(['Since cleverage/cache-process-bundle 2.3: Configuring "clever_age_cache_process" is deprecated, the bundle has no configuration: the keys "foo", "bar" are ignored. They will be rejected in 3.0.'], $deprecations);
}

public function testNoDeprecationWithoutConfigurationKey(): void
{
$deprecations = $this->collectDeprecations(static function (): void {
(new CleverAgeCacheProcessExtension())->load([[], []], new ContainerBuilder());
});

self::assertSame([], $deprecations);
}

public function testConfigurationHasNoOption(): void
{
$configuration = (new CleverAgeCacheProcessExtension())->getConfiguration([], new ContainerBuilder());

self::assertInstanceOf(Configuration::class, $configuration);
self::assertSame('clever_age_cache_process', $configuration->getConfigTreeBuilder()->buildTree()->getName());
}

/**
* @param callable(): void $callback
*
* @return list<string>
*/
private function collectDeprecations(callable $callback): array
{
$deprecations = [];
set_error_handler(static function (int $errno, string $errstr) use (&$deprecations): bool {
$deprecations[] = $errstr;

return true;
}, \E_USER_DEPRECATED);
try {
$callback();
} finally {
restore_error_handler();
}

return $deprecations;
}
}

final readonly class AutowiredRegistryConsumer
Expand Down
Loading