From 20db8955b46440c4e8e2317e4dd2a4fabf863fd8 Mon Sep 17 00:00:00 2001 From: Andrey Helldar Date: Sat, 6 Sep 2025 00:44:16 +0300 Subject: [PATCH] Refactored converters and added `ConverterHelper` to simplify usage --- .../{ConvertToJson.php => JsonConverter.php} | 2 +- ...ToJsonLines.php => JsonLinesConverter.php} | 2 +- .../{ConvertToXml.php => XmlConverter.php} | 2 +- src/Helpers/ConverterHelper.php | 25 +++++++++++++++++++ src/Services/GeneratorService.php | 19 +++++--------- tests/Unit/Architecture/ConverterTest.php | 7 ++++++ 6 files changed, 41 insertions(+), 16 deletions(-) rename src/Converters/{ConvertToJson.php => JsonConverter.php} (98%) rename src/Converters/{ConvertToJsonLines.php => JsonLinesConverter.php} (97%) rename src/Converters/{ConvertToXml.php => XmlConverter.php} (99%) create mode 100644 src/Helpers/ConverterHelper.php create mode 100644 tests/Unit/Architecture/ConverterTest.php diff --git a/src/Converters/ConvertToJson.php b/src/Converters/JsonConverter.php similarity index 98% rename from src/Converters/ConvertToJson.php rename to src/Converters/JsonConverter.php index 8eb796b..d8349a6 100644 --- a/src/Converters/ConvertToJson.php +++ b/src/Converters/JsonConverter.php @@ -14,7 +14,7 @@ use function mb_substr; use function sprintf; -class ConvertToJson extends Converter +class JsonConverter extends Converter { public function __construct( #[Config('feeds.converters.json.options')] diff --git a/src/Converters/ConvertToJsonLines.php b/src/Converters/JsonLinesConverter.php similarity index 97% rename from src/Converters/ConvertToJsonLines.php rename to src/Converters/JsonLinesConverter.php index 6e028bd..e0db8a4 100644 --- a/src/Converters/ConvertToJsonLines.php +++ b/src/Converters/JsonLinesConverter.php @@ -12,7 +12,7 @@ use function is_array; use function json_encode; -class ConvertToJsonLines extends Converter +class JsonLinesConverter extends Converter { public function __construct( #[Config('feeds.converters.json.options')] diff --git a/src/Converters/ConvertToXml.php b/src/Converters/XmlConverter.php similarity index 99% rename from src/Converters/ConvertToXml.php rename to src/Converters/XmlConverter.php index bd43699..b84639e 100644 --- a/src/Converters/ConvertToXml.php +++ b/src/Converters/XmlConverter.php @@ -21,7 +21,7 @@ use function str_starts_with; use function trim; -class ConvertToXml extends Converter +class XmlConverter extends Converter { protected DOMDocument $document; diff --git a/src/Helpers/ConverterHelper.php b/src/Helpers/ConverterHelper.php new file mode 100644 index 0000000..d925c74 --- /dev/null +++ b/src/Helpers/ConverterHelper.php @@ -0,0 +1,25 @@ + app(XmlConverter::class), + FeedFormatEnum::Json => app(JsonConverter::class), + FeedFormatEnum::JsonLines => app(JsonLinesConverter::class), + }; + } +} diff --git a/src/Services/GeneratorService.php b/src/Services/GeneratorService.php index 0326ff3..aec3f53 100644 --- a/src/Services/GeneratorService.php +++ b/src/Services/GeneratorService.php @@ -5,11 +5,8 @@ namespace DragonCode\LaravelFeed\Services; use DragonCode\LaravelFeed\Converters\Converter; -use DragonCode\LaravelFeed\Converters\ConvertToJson; -use DragonCode\LaravelFeed\Converters\ConvertToJsonLines; -use DragonCode\LaravelFeed\Converters\ConvertToXml; -use DragonCode\LaravelFeed\Enums\FeedFormatEnum; use DragonCode\LaravelFeed\Feeds\Feed; +use DragonCode\LaravelFeed\Helpers\ConverterHelper; use DragonCode\LaravelFeed\Queries\FeedQuery; use Illuminate\Console\OutputStyle; use Illuminate\Database\Eloquent\Collection; @@ -23,9 +20,7 @@ class GeneratorService { public function __construct( protected FilesystemService $filesystem, - protected ConvertToXml $xmlConverter, - protected ConvertToJson $jsonConverter, - protected ConvertToJsonLines $jsonLinesConverter, + protected ConverterHelper $converter, protected FeedQuery $query, ) {} @@ -64,7 +59,7 @@ function (Collection $models) use ($file, $feed, $bar, &$progress) { foreach ($models as $model) { $content[] = $this->converter($feed)->item( - item : $feed->item($model), + item: $feed->item($model), isLast: $progress <= 1 ); @@ -148,11 +143,9 @@ protected function setLastActivity(Feed $feed): void protected function converter(Feed $feed): Converter { - return match ($feed->format()) { - FeedFormatEnum::Xml => $this->xmlConverter, - FeedFormatEnum::Json => $this->jsonConverter, - FeedFormatEnum::JsonLines => $this->jsonLinesConverter, - }; + return $this->converter->get( + $feed->format() + ); } protected function progressBar(int $count, ?OutputStyle $output): ?ProgressBar diff --git a/tests/Unit/Architecture/ConverterTest.php b/tests/Unit/Architecture/ConverterTest.php new file mode 100644 index 0000000..0f2e205 --- /dev/null +++ b/tests/Unit/Architecture/ConverterTest.php @@ -0,0 +1,7 @@ +expect('DragonCode\LaravelFeed\Converters') + ->toHaveSuffix('Converter');