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
* [#43](https://github.com/cleverage/cache-process-bundle/issues/43) Give a code to the tasks ([cleverage/process-bundle#91](https://github.com/cleverage/process-bundle/issues/91)): `cache_get` and `cache_set` (`task: cache_get`, with `cleverage/process-bundle` 5.4 or later, referencing them by `service` being deprecated there). The tasks have their class name as service id; fetching them directly from the service container is deprecated (`container.private`), they will be private in 3.0. The former ids `cleverage_cache_process.task.get` / `cleverage_cache_process.task.set` are deprecated aliases, removed in 3.0. Update documentation, add tests.
* [#41](https://github.com/cleverage/cache-process-bundle/issues/41) CI: test the lowest versions allowed by `composer.json` (`--prefer-lowest`, PHP 8.2).
* [#39](https://github.com/cleverage/cache-process-bundle/issues/39) Add a `.gitattributes`: the development files (`.docker/`, `.github/`, `tests/`, quality tools and PHPUnit configurations, `Makefile`) are no longer part of the archive installed by Composer (`dist`).
* [#37](https://github.com/cleverage/cache-process-bundle/issues/37) Require `psr/cache`, used directly by `Adapter` and `AbstractCacheTask` but only installed through `symfony/cache` and `cleverage/process-bundle`.
Expand Down
38 changes: 26 additions & 12 deletions config/services/task.yaml
Original file line number Diff line number Diff line change
@@ -1,20 +1,34 @@
services:
cleverage_cache_process.task.get:
class: CleverAge\CacheProcessBundle\Task\GetTask
public: false
_defaults:
# Public for the direct access from the service container, deprecated since 2.3: private in 3.0
public: true
tags:
- { name: container.private, package: cleverage/cache-process-bundle, version: '2.3' }

CleverAge\CacheProcessBundle\Task\GetTask:
shared: false
arguments:
- '@cleverage_cache_process.registry.adapter'
CleverAge\CacheProcessBundle\Task\GetTask:
alias: cleverage_cache_process.task.get
public: true

cleverage_cache_process.task.set:
class: CleverAge\CacheProcessBundle\Task\SetTask
tags:
- { name: cleverage.task, code: cache_get }
cleverage_cache_process.task.get:
alias: CleverAge\CacheProcessBundle\Task\GetTask
public: false
deprecated:
package: cleverage/cache-process-bundle
version: '2.3'
message: 'The "%alias_id%" service alias is deprecated, use the "cache_get" task code or the class name of the task instead. It will be removed in 3.0.'

CleverAge\CacheProcessBundle\Task\SetTask:
shared: false
arguments:
- '@cleverage_cache_process.registry.adapter'
CleverAge\CacheProcessBundle\Task\SetTask:
alias: cleverage_cache_process.task.set
public: true
tags:
- { name: cleverage.task, code: cache_set }
cleverage_cache_process.task.set:
alias: CleverAge\CacheProcessBundle\Task\SetTask
public: false
deprecated:
package: cleverage/cache-process-bundle
version: '2.3'
message: 'The "%alias_id%" service alias is deprecated, use the "cache_set" task code or the class name of the task instead. It will be removed in 3.0.'
14 changes: 7 additions & 7 deletions docs/cookbooks/cache_warmup.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,21 @@ clever_age_process:
description: 'Store each line of the catalog CSV file in the catalog cache, indexed by sku'
tasks:
read_source:
service: '@CleverAge\ProcessBundle\Task\File\Csv\CsvReaderTask'
task: csv_reader
options:
file_path: '%kernel.project_dir%/var/data/catalog.csv'
delimiter: ';'
outputs: [filter_valid]

filter_valid:
service: '@CleverAge\ProcessBundle\Task\FilterTask'
task: filter
options:
not_empty:
'[sku]': ~
outputs: [format]

format:
service: '@CleverAge\ProcessBundle\Task\TransformerTask'
task: transformer
options:
transformers:
mapping:
Expand All @@ -60,28 +60,28 @@ clever_age_process:
outputs: [store, count_rows]

store:
service: '@CleverAge\CacheProcessBundle\Task\SetTask'
task: cache_set
error_strategy: skip # A sku which is not a valid cache key is logged and skipped
options:
adapter: 'catalog' # The key and the value are given by the input

count_rows:
service: '@CleverAge\ProcessBundle\Task\Reporting\StatCounterTask'
task: stat_counter

app.catalog_cache_read:
description: 'Read a catalog line from the catalog cache'
help: "bin/console cleverage:process:execute app.catalog_cache_read -c sku:\"'ABC-001'\""
tasks:
read:
service: '@CleverAge\CacheProcessBundle\Task\GetTask'
task: cache_get
options:
adapter: 'catalog'
key: '{{ sku }}'
on_miss: skip
outputs: [log]

log:
service: '@CleverAge\ProcessBundle\Task\Reporting\LoggerTask'
task: logger
options:
level: info
message: 'Catalog line found in cache'
Expand Down
14 changes: 7 additions & 7 deletions docs/cookbooks/share_data_between_branches.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,11 @@ clever_age_process:
description: 'Store items in a first branch, then read some of them in other branches'
tasks:
start:
service: '@CleverAge\ProcessBundle\Task\DummyTask'
task: dummy
outputs: [data, get, get_missing] # Branches are executed in this order

data:
service: '@CleverAge\ProcessBundle\Task\ConstantIterableOutputTask'
task: constant_iterable_output
options:
output:
- key: 'key1'
Expand All @@ -60,7 +60,7 @@ clever_age_process:
outputs: [format]

format:
service: '@CleverAge\ProcessBundle\Task\TransformerTask'
task: transformer
options:
transformers:
mapping:
Expand All @@ -72,26 +72,26 @@ clever_age_process:
outputs: [set]

set:
service: '@CleverAge\CacheProcessBundle\Task\SetTask'
task: cache_set
options:
adapter: 'memory' # The key and the value are given by the input

get:
service: '@CleverAge\CacheProcessBundle\Task\GetTask'
task: cache_get
options:
adapter: 'memory'
key: 'key2'
outputs: [debug]

get_missing:
service: '@CleverAge\CacheProcessBundle\Task\GetTask'
task: cache_get
options:
adapter: 'memory'
key: 'missing'
outputs: [debug]

debug:
service: '@CleverAge\ProcessBundle\Task\Debug\DebugTask'
task: debug
```

How it works:
Expand Down
10 changes: 10 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@ The bundle has no semantic configuration. To use the cache tasks, declare at lea
(usually `CleverAge\CacheProcessBundle\Adapter\Adapter`, wrapping any Symfony cache pool), tagged
`cleverage.cache.adapter`. Its code is then used in the `adapter` option of the tasks.

The tasks are registered as services (non-shared) and are used in your processes by their code, `cache_get` and
`cache_set` (e.g. `task: cache_get`, requires `cleverage/process-bundle` 5.4 or later, see its
[task definition](https://github.com/cleverage/process-bundle/blob/main/docs/reference/02-task_definition.md)).
Referencing them by their class name (`service: '@CleverAge\CacheProcessBundle\Task\GetTask'`) is deprecated since
`cleverage/process-bundle` 5.4.

Their service id is their class name. Fetching them directly from the service container is deprecated since 2.3 (they
will be private in 3.0); their former ids, `cleverage_cache_process.task.get` and `cleverage_cache_process.task.set`,
are deprecated aliases since 2.3, removed in 3.0.

```yaml
# config/services.yaml
services:
Expand Down
3 changes: 2 additions & 1 deletion docs/reference/tasks/_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Task reference
--------------

* **Service**: `Fully\Qualified\ClassName`
* **Code**: `cache_task_code` (`task: cache_task_code`)
* **Iterable task** _(only if it implements `IterableTaskInterface`)_
* **Blocking task** _(only if it implements `BlockingTaskInterface`)_
* **Flushable task** _(only if it implements `FlushableTaskInterface`)_
Expand Down Expand Up @@ -39,7 +40,7 @@ Examples
```yaml
# Task configuration level
code:
service: '@Fully\Qualified\ClassName'
task: task_code
options:
a: 1
b: 2
Expand Down
15 changes: 8 additions & 7 deletions docs/reference/tasks/get_task.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ Task reference
--------------

* **Service**: `CleverAge\CacheProcessBundle\Task\GetTask`
* **Code**: `cache_get` (`task: cache_get`)

Accepted inputs
---------------
Expand Down Expand Up @@ -51,7 +52,7 @@ Examples
```yaml
# Task configuration level
get:
service: '@CleverAge\CacheProcessBundle\Task\GetTask'
task: cache_get
options:
adapter: 'memory'
key: 'key2'
Expand All @@ -63,7 +64,7 @@ get:
```yaml
# Task configuration level
get:
service: '@CleverAge\CacheProcessBundle\Task\GetTask'
task: cache_get
options:
adapter: 'catalog'
key: '{{ sku }}'
Expand All @@ -76,14 +77,14 @@ get:
```yaml
# Task configuration level
get:
service: '@CleverAge\CacheProcessBundle\Task\GetTask'
task: cache_get
options:
adapter: 'catalog'
on_miss: skip # The input ({ key: ... }) is sent to the error outputs
outputs: [debug]
error_outputs: [compute]
compute:
service: '@CleverAge\ProcessBundle\Task\TransformerTask'
task: transformer
options:
transformers:
mapping:
Expand All @@ -96,7 +97,7 @@ compute:
slugify: ~ # Any computation
outputs: [set]
set:
service: '@CleverAge\CacheProcessBundle\Task\SetTask'
task: cache_set
options:
adapter: 'catalog'
```
Expand All @@ -106,7 +107,7 @@ set:
```yaml
# Task configuration level
build_key:
service: '@CleverAge\ProcessBundle\Task\TransformerTask'
task: transformer
options:
transformers:
mapping:
Expand All @@ -115,7 +116,7 @@ build_key:
code: '[sku]'
outputs: [get]
get:
service: '@CleverAge\CacheProcessBundle\Task\GetTask'
task: cache_get
options:
adapter: 'catalog' # The key is given by the input
```
Expand Down
11 changes: 6 additions & 5 deletions docs/reference/tasks/set_task.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ Task reference
--------------

* **Service**: `CleverAge\CacheProcessBundle\Task\SetTask`
* **Code**: `cache_set` (`task: cache_set`)

Accepted inputs
---------------
Expand Down Expand Up @@ -44,7 +45,7 @@ Examples
```yaml
# Task configuration level
set:
service: '@CleverAge\CacheProcessBundle\Task\SetTask'
task: cache_set
options:
adapter: 'memory'
key: 'key1'
Expand All @@ -59,7 +60,7 @@ set:
```yaml
# Task configuration level
data:
service: '@CleverAge\ProcessBundle\Task\ConstantIterableOutputTask'
task: constant_iterable_output
options:
output:
- key: 'key1'
Expand All @@ -70,7 +71,7 @@ data:
column2: value2-2
outputs: [format]
format:
service: '@CleverAge\ProcessBundle\Task\TransformerTask'
task: transformer
options:
transformers:
mapping:
Expand All @@ -81,7 +82,7 @@ format:
code: '.'
outputs: [set]
set:
service: '@CleverAge\CacheProcessBundle\Task\SetTask'
task: cache_set
options:
adapter: 'memory' # The key and the value are given by the input
```
Expand All @@ -91,7 +92,7 @@ set:
```yaml
# Task configuration level
set:
service: '@CleverAge\CacheProcessBundle\Task\SetTask'
task: cache_set
options:
adapter: 'catalog'
expires_after: 3600
Expand Down
30 changes: 20 additions & 10 deletions tests/DependencyInjection/CleverAgeCacheProcessExtensionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,32 +37,42 @@ public function testRegistryIsRegistered(): void
}

/**
* @return iterable<string, array{string, class-string}>
* @return iterable<string, array{class-string, string, string}>
*/
public static function provideTasks(): iterable
{
yield 'get' => ['cleverage_cache_process.task.get', GetTask::class];
yield 'set' => ['cleverage_cache_process.task.set', SetTask::class];
yield 'get' => [GetTask::class, 'cache_get', 'cleverage_cache_process.task.get'];
yield 'set' => [SetTask::class, 'cache_set', 'cleverage_cache_process.task.set'];
}

/**
* @param class-string $class
*/
#[DataProvider('provideTasks')]
public function testTaskIsRegistered(string $id, string $class): void
public function testTaskIsRegistered(string $class, string $code, string $deprecatedId): void
{
$container = new ContainerBuilder();
(new CleverAgeCacheProcessExtension())->load([], $container);

$definition = $container->getDefinition($id);
self::assertSame($class, $definition->getClass());
// The class name is the service id
$definition = $container->getDefinition($class);
// Tasks are stateful: each process execution must get its own instance
self::assertFalse($definition->isShared());
self::assertEquals([new Reference('cleverage_cache_process.registry.adapter')], $definition->getArguments());
// Referenced by its code in the process configurations (task: <code>)
self::assertSame([['code' => $code]], $definition->getTag('cleverage.task'));
// Public for the direct access from the service container, deprecated
self::assertTrue($definition->isPublic());
self::assertSame([['package' => 'cleverage/cache-process-bundle', 'version' => '2.3']], $definition->getTag('container.private'));

// Referenced as '@<class>' in process configurations
$alias = $container->getAlias($class);
self::assertSame($id, (string) $alias);
self::assertTrue($alias->isPublic());
// Former id, deprecated
$alias = $container->getAlias($deprecatedId);
self::assertSame($class, (string) $alias);
self::assertFalse($alias->isPublic());
self::assertTrue($alias->isDeprecated());
self::assertSame(
['package' => 'cleverage/cache-process-bundle', 'version' => '2.3', 'message' => 'The "'.$deprecatedId.'" service alias is deprecated, use the "'.$code.'" task code or the class name of the task instead. It will be removed in 3.0.'],
$alias->getDeprecation($deprecatedId)
);
}
}
Loading