Skip to content

Commit e607fa8

Browse files
committed
Rework RenameEachEntryTransformer to a single instance on multiple strategies
1 parent 57702b4 commit e607fa8

3 files changed

Lines changed: 41 additions & 9 deletions

File tree

src/core/etl/src/Flow/ETL/DataFrame.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -714,9 +714,7 @@ public function renameAllUpperCaseWord() : self
714714

715715
public function renameEach(RenameEntryStrategy ...$strategies) : self
716716
{
717-
foreach ($strategies as $strategy) {
718-
$this->pipeline->add(new RenameEachEntryTransformer($strategy));
719-
}
717+
$this->pipeline->add(new RenameEachEntryTransformer(...$strategies));
720718

721719
return $this;
722720
}

src/core/etl/src/Flow/ETL/Transformer/RenameEachEntryTransformer.php

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,36 @@
44

55
namespace Flow\ETL\Transformer;
66

7-
use Flow\ETL\{FlowContext, Row, Rows, Transformer, Transformer\Rename\RenameEntryStrategy};
7+
use Flow\ETL\{Exception\InvalidArgumentException,
8+
FlowContext,
9+
Row,
10+
Rows,
11+
Transformer,
12+
Transformer\Rename\RenameEntryStrategy};
813

914
final readonly class RenameEachEntryTransformer implements Transformer
1015
{
11-
public function __construct(
12-
private RenameEntryStrategy $strategy,
13-
) {
16+
/**
17+
* @var array<RenameEntryStrategy>
18+
*/
19+
private array $strategies;
20+
21+
public function __construct(RenameEntryStrategy ...$strategies)
22+
{
23+
if ([] === $strategies) {
24+
throw new InvalidArgumentException('At least one strategy must be provided.');
25+
}
26+
27+
$this->strategies = $strategies;
1428
}
1529

1630
public function transform(Rows $rows, FlowContext $context) : Rows
1731
{
1832
return $rows->map(function (Row $row) use ($context) : Row {
19-
foreach ($row->entries()->all() as $entry) {
20-
$row = $this->strategy->rename($row, $entry, $context);
33+
foreach ($this->strategies as $strategy) {
34+
foreach ($row->entries()->all() as $entry) {
35+
$row = $strategy->rename($row, $entry, $context);
36+
}
2137
}
2238

2339
return $row;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Flow\ETL\Tests\Unit\Transformer;
6+
7+
use Flow\ETL\{Exception\InvalidArgumentException, Tests\FlowTestCase, Transformer\RenameEachEntryTransformer};
8+
9+
final class RenameEachEntryTransformerTest extends FlowTestCase
10+
{
11+
public function test_renaming_fails_without_any_strategy() : void
12+
{
13+
$this->expectException(InvalidArgumentException::class);
14+
$this->expectExceptionMessage('At least one strategy must be provided.');
15+
16+
new RenameEachEntryTransformer();
17+
}
18+
}

0 commit comments

Comments
 (0)