Skip to content

Commit ee1d29c

Browse files
committed
Add a new RenameAllTransliterateTransformer
1 parent 4d82a90 commit ee1d29c

4 files changed

Lines changed: 61 additions & 1 deletion

File tree

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
OrderEntries\Comparator,
4343
OrderEntries\TypeComparator,
4444
RenameAllCaseTransformer,
45+
RenameAllTransliterateTransformer,
4546
RenameEntryTransformer,
4647
RenameStrReplaceAllEntriesTransformer,
4748
ScalarFunctionFilterTransformer,
@@ -656,6 +657,16 @@ public function renameAllStyle(StringStyles|string $style) : self
656657
return $this;
657658
}
658659

660+
/**
661+
* @lazy
662+
*/
663+
public function renameAllTransliterate() : self
664+
{
665+
$this->pipeline->add(new RenameAllTransliterateTransformer());
666+
667+
return $this;
668+
}
669+
659670
/**
660671
* @lazy
661672
*/

src/core/etl/src/Flow/ETL/Pipeline/Optimizer/LimitOptimization.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,16 @@
88
use Flow\ETL\Function\ScalarFunction\ExpandResults;
99
use Flow\ETL\{Loader, Pipeline, Transformer};
1010
use Flow\ETL\Pipeline\{BatchingPipeline, CollectingPipeline, LinkedPipeline, SynchronousPipeline, VoidPipeline};
11-
use Flow\ETL\Transformer\{CallbackRowTransformer, DropEntriesTransformer, EntryNameStyleConverterTransformer, LimitTransformer, RenameAllCaseTransformer, RenameEntryTransformer, RenameStrReplaceAllEntriesTransformer, ScalarFunctionTransformer, SelectEntriesTransformer};
11+
use Flow\ETL\Transformer\{CallbackRowTransformer,
12+
DropEntriesTransformer,
13+
EntryNameStyleConverterTransformer,
14+
LimitTransformer,
15+
RenameAllCaseTransformer,
16+
RenameAllTransliterateTransformer,
17+
RenameEntryTransformer,
18+
RenameStrReplaceAllEntriesTransformer,
19+
ScalarFunctionTransformer,
20+
SelectEntriesTransformer};
1221

1322
final class LimitOptimization implements Optimization
1423
{
@@ -27,6 +36,7 @@ final class LimitOptimization implements Optimization
2736
SelectEntriesTransformer::class,
2837
DropEntriesTransformer::class,
2938
RenameAllCaseTransformer::class,
39+
RenameAllTransliterateTransformer::class,
3040
RenameEntryTransformer::class,
3141
RenameStrReplaceAllEntriesTransformer::class,
3242
LimitTransformer::class,
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Flow\ETL\Transformer;
6+
7+
use Flow\ETL\{FlowContext, Row, Rows, Transformer};
8+
9+
final readonly class RenameAllTransliterateTransformer implements Transformer
10+
{
11+
public function transform(Rows $rows, FlowContext $context) : Rows
12+
{
13+
return $rows->map(function (Row $row) : Row {
14+
foreach ($row->entries()->all() as $entry) {
15+
$row = $row->rename($entry->name(), (string) \transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', $entry->name()));
16+
}
17+
18+
return $row;
19+
});
20+
}
21+
}

src/core/etl/tests/Flow/ETL/Tests/Integration/DataFrame/RenameTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,24 @@ public function test_rename_all_to_snake_case() : void
9898
);
9999
}
100100

101+
public function test_rename_all_transliterate() : void
102+
{
103+
$rows = rows(row(int_entry('ÓSMY', 8)), row(int_entry('DZIEWIĄTY', 9)));
104+
105+
$ds = df()
106+
->read(from_rows($rows))
107+
->renameAllTransliterate()
108+
->getEachAsArray();
109+
110+
self::assertEquals(
111+
[
112+
['osmy' => 8],
113+
['dziewiaty' => 9],
114+
],
115+
\iterator_to_array($ds)
116+
);
117+
}
118+
101119
public function test_rename_all_upper_case() : void
102120
{
103121
$rows = rows(row(int_entry('id', 1), str_entry('name', 'name'), bool_entry('active', true)), row(int_entry('id', 2), str_entry('name', 'name'), bool_entry('active', false)));

0 commit comments

Comments
 (0)