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
* [#47](https://github.com/cleverage/archive-process-bundle/issues/47) Configuring a key under `clever_age_archive_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.
* [#45](https://github.com/cleverage/archive-process-bundle/issues/45) 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` and `Exception\RuntimeException`, extending the SPL exceptions thrown before (same messages, the existing `catch` keep working). Add tests.
* [#43](https://github.com/cleverage/archive-process-bundle/issues/43) 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).
* [#38](https://github.com/cleverage/archive-process-bundle/issues/38) Define the public API (Symfony BC promise, as [cleverage/process-bundle#279](https://github.com/cleverage/process-bundle/issues/279)): `ZipTask`, `UnzipTask` and `CleverAgeArchiveProcessBundle` are marked `@final since 2.3`, they will be `final` in 3.0: extending them triggers a deprecation with the Symfony `DebugClassLoader`. `CleverAgeArchiveProcessExtension` is marked `@internal`.
Expand Down
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
"cleverage/process-bundle": "^5.0",
"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 @@ -42,6 +42,8 @@ will be private in 3.0); their former ids, `cleverage_archive_process.task.zip`
Both tasks accept their options either from the task configuration or from their input (an array merged with the
options), which allows computing paths in a previous task.

No option can be configured under `clever_age_archive_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.

## Documentation

- Cookbooks
Expand Down
12 changes: 12 additions & 0 deletions src/DependencyInjection/CleverAgeArchiveProcessExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,18 @@ class CleverAgeArchiveProcessExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container): void
{
$keys = array_keys(array_merge(...$configs));
if ([] !== $keys) {
trigger_deprecation(
'cleverage/archive-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');
}

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/ArchiveProcessBundle 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\ArchiveProcessBundle\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 CleverAgeArchiveProcessExtension::load()), they will be
* rejected in 3.0.
*
* @internal
*/
final class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder(): TreeBuilder
{
$treeBuilder = new TreeBuilder('clever_age_archive_process');
/** @var ArrayNodeDefinition $rootNode */
$rootNode = $treeBuilder->getRootNode();
$rootNode->ignoreExtraKeys();

return $treeBuilder;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
namespace CleverAge\ArchiveProcessBundle\Tests\DependencyInjection;

use CleverAge\ArchiveProcessBundle\DependencyInjection\CleverAgeArchiveProcessExtension;
use CleverAge\ArchiveProcessBundle\DependencyInjection\Configuration;
use CleverAge\ArchiveProcessBundle\Task\UnzipTask;
use CleverAge\ArchiveProcessBundle\Task\ZipTask;
use PHPUnit\Framework\Attributes\CoversClass;
Expand All @@ -23,6 +24,7 @@
use Symfony\Component\Yaml\Yaml;

#[CoversClass(CleverAgeArchiveProcessExtension::class)]
#[CoversClass(Configuration::class)]
class CleverAgeArchiveProcessExtensionTest extends TestCase
{
public function testEveryServiceDefinitionFileIsLoaded(): void
Expand Down Expand Up @@ -96,4 +98,52 @@ public function testTaskIsRegistered(string $class, string $code, string $deprec
$alias->getDeprecation($deprecatedId)
);
}

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

self::assertSame(['Since cleverage/archive-process-bundle 2.3: Configuring "clever_age_archive_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 CleverAgeArchiveProcessExtension())->load([[], []], new ContainerBuilder());
});

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

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

self::assertInstanceOf(Configuration::class, $configuration);
self::assertSame('clever_age_archive_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;
}
}
Loading