From 1e0af4bc34e20c9f7c5628e4422c07767686cfb6 Mon Sep 17 00:00:00 2001 From: Andrey Helldar Date: Tue, 7 Oct 2025 01:33:19 +0300 Subject: [PATCH 1/8] Added split feed support --- src/Feeds/Feed.php | 30 ++- src/Services/ExportService.php | 191 ++++++++++++++++++++ src/Services/FilesystemService.php | 31 +--- src/Services/GeneratorService.php | 78 ++++---- tests/Feature/Feeds/Split/CsvTest.php | 15 ++ tests/Feature/Feeds/Split/JsonLinesTest.php | 15 ++ tests/Feature/Feeds/Split/JsonTest.php | 15 ++ tests/Feature/Feeds/Split/MaxFilesTest.php | 12 ++ tests/Feature/Feeds/Split/PerFileTest.php | 12 ++ tests/Feature/Feeds/Split/RssTest.php | 15 ++ tests/Feature/Feeds/Split/XmlTest.php | 14 ++ tests/Helpers/expects.php | 24 +-- tests/Helpers/models.php | 2 +- workbench/app/Feeds/SplitMaxFilesFeed.php | 30 +++ workbench/app/Feeds/SplitPerFileFeed.php | 25 +++ workbench/database/seeders/FeedSeeder.php | 6 + 16 files changed, 426 insertions(+), 89 deletions(-) create mode 100644 src/Services/ExportService.php create mode 100644 tests/Feature/Feeds/Split/CsvTest.php create mode 100644 tests/Feature/Feeds/Split/JsonLinesTest.php create mode 100644 tests/Feature/Feeds/Split/JsonTest.php create mode 100644 tests/Feature/Feeds/Split/MaxFilesTest.php create mode 100644 tests/Feature/Feeds/Split/PerFileTest.php create mode 100644 tests/Feature/Feeds/Split/RssTest.php create mode 100644 tests/Feature/Feeds/Split/XmlTest.php create mode 100644 workbench/app/Feeds/SplitMaxFilesFeed.php create mode 100644 workbench/app/Feeds/SplitPerFileFeed.php diff --git a/src/Feeds/Feed.php b/src/Feeds/Feed.php index 7a0e465..69ebb0a 100644 --- a/src/Feeds/Feed.php +++ b/src/Feeds/Feed.php @@ -46,6 +46,16 @@ public function chunkSize(): int return 1000; } + public function perFile(): int + { + return 0; + } + + public function maxFiles(): int + { + return 0; + } + public function header(): string { return match ($this->format()) { @@ -87,10 +97,26 @@ public function filename(): string ->toString(); } - public function path(): string + public function path(int|string $suffix = ''): string { + if (empty($suffix)) { + return $this->storage()->path( + $this->filename() + ); + } + + $filename = $this->filename(); + + $directory = pathinfo($filename, PATHINFO_DIRNAME); + $basename = pathinfo($filename, PATHINFO_FILENAME); + $extension = pathinfo($filename, PATHINFO_EXTENSION); + + if ($suffix) { + $suffix = '-' . $suffix; + } + return $this->storage()->path( - $this->filename() + "$directory/$basename$suffix.$extension" ); } diff --git a/src/Services/ExportService.php b/src/Services/ExportService.php new file mode 100644 index 0000000..8cf84bb --- /dev/null +++ b/src/Services/ExportService.php @@ -0,0 +1,191 @@ +perFile = $this->perFile($this->feed); + $this->maxFiles = $this->maxFiles($this->feed); + $this->total = $this->total(); + + $this->progressBar = $this->createProgressBar( + $this->total + ); + } + + public function chunk(int $chunk): static + { + $this->chunk = $chunk; + + return $this; + } + + public function file(Closure $create, Closure $close): static + { + $this->createFile = $create; + $this->closeFile = $close; + + return $this; + } + + public function item(Closure $callback): static + { + $this->item = $callback; + + return $this; + } + + public function export(): void + { + $this->feed->builder() + ->lazyById($this->chunk) + ->each(function (Model $model) { + $this->line++; + $this->records++; + $this->total--; + + $this->content[] = value($this->item, $model, $this->line); + + $this->store(); + + if ($this->total <= 0) { + return false; + } + + //if ($this->maxFiles && $this->file >= $this->maxFiles) { + // return false; + //} + }); + + $this->store(true); + + $this->progressBar?->finish(); + } + + protected function store(bool $force = false): void + { + if ($force || $this->records >= $this->perFile || $this->line >= $this->chunk) { + $this->line = 0; + + $this->append(); + + $this->content = []; + } + + if ($force || $this->records >= $this->perFile) { + $this->records = 0; + + $this->releaseFile(); + } + } + + protected function getFile() // @pest-ignore-type + { + if (! empty($this->resource)) { + return $this->resource; + } + + return $this->resource ??= value($this->createFile); + } + + protected function releaseFile(): void + { + if ($this->resource === null) { + return; + } + + value($this->closeFile, $this->resource, $this->file); + + $this->resource = null; + + $this->file++; + } + + protected function append(): void + { + if (blank($this->content)) { + return; + } + + $this->filesystem->append($this->getFile(), implode(PHP_EOL, $this->content), $this->feed->path()); + } + + protected function perFile(Feed $feed): int + { + if ($count = max($feed->perFile(), 0)) { + return $count; + } + + return $this->modelCount(); + } + + protected function maxFiles(Feed $feed): int + { + return max($feed->maxFiles(), 0); + } + + protected function total(): int + { + if ($this->maxFiles <= 0) { + return $this->modelCount(); + } + + return $this->perFile * $this->maxFiles; + } + + protected function modelCount(): int + { + return $this->modelCount ??= $this->feed->builder()->count(); + } + + protected function createProgressBar(int $total): ?ProgressBar + { + return $this->output?->createProgressBar($total); + } +} diff --git a/src/Services/FilesystemService.php b/src/Services/FilesystemService.php index 37ea3b0..3ac08dd 100644 --- a/src/Services/FilesystemService.php +++ b/src/Services/FilesystemService.php @@ -16,10 +16,7 @@ use function dirname; use function fclose; -use function fflush; -use function flock; use function fopen; -use function ftruncate; use function fwrite; use function is_resource; use function microtime; @@ -47,8 +44,6 @@ public function createDraft(string $filename) // @pest-ignore-type // @codeCoverageIgnoreEnd } - $this->lock($resource); - return $resource; // @codeCoverageIgnoreStart } catch (Throwable $e) { @@ -77,7 +72,6 @@ public function release($resource, string $path): void // @pest-ignore-type try { $temp = $this->getMetaPath($resource); - $this->unlock($resource); $this->close($resource); if ($this->file->exists($path)) { @@ -93,7 +87,7 @@ public function release($resource, string $path): void // @pest-ignore-type $this->cleanTemporaryDirectory($temp); // @codeCoverageIgnoreStart } catch (Throwable $e) { - throw new CloseFeedException($temp, $e); + throw new CloseFeedException($path, $e); } // @codeCoverageIgnoreEnd } @@ -145,27 +139,4 @@ protected function getMetaPath($file): string // @pest-ignore-type return $meta['uri'] ?? throw new ResourceMetaException; } - - /** - * @param resource $resource - */ - protected function lock($resource): void // @pest-ignore-type - { - if (! flock($resource, LOCK_EX)) { - // @codeCoverageIgnoreStart - throw new RuntimeException('Resource lock error. The resource may be in use by another process.'); - // @codeCoverageIgnoreEnd - } - - ftruncate($resource, 0); - } - - /** - * @param resource $resource - */ - protected function unlock($resource): void // @pest-ignore-type - { - fflush($resource); - flock($resource, LOCK_UN); - } } diff --git a/src/Services/GeneratorService.php b/src/Services/GeneratorService.php index 7243947..140fb6c 100644 --- a/src/Services/GeneratorService.php +++ b/src/Services/GeneratorService.php @@ -4,6 +4,7 @@ namespace DragonCode\LaravelFeed\Services; +use Closure; use DragonCode\LaravelFeed\Converters\Converter; use DragonCode\LaravelFeed\Events\FeedFinishedEvent; use DragonCode\LaravelFeed\Events\FeedStartingEvent; @@ -12,14 +13,12 @@ use DragonCode\LaravelFeed\Helpers\ConverterHelper; use DragonCode\LaravelFeed\Queries\FeedQuery; use Illuminate\Console\OutputStyle; -use Illuminate\Database\Eloquent\Collection; -use Symfony\Component\Console\Helper\ProgressBar; +use Illuminate\Database\Eloquent\Model; use Throwable; use function blank; use function event; use function get_class; -use function implode; class GeneratorService { @@ -34,18 +33,7 @@ public function feed(Feed $feed, ?OutputStyle $output = null): void try { $this->started($feed); - $file = $this->createDraft( - $feed->filename() - ); - - $this->performHeader($file, $feed); - $this->performRoot($file, $feed, true); - $this->performInfo($file, $feed); - $this->performRoot($file, $feed, false); - $this->performItem($file, $feed, $output); - $this->performFooter($file, $feed); - - $this->release($file, $feed->path()); + $this->export($feed, $output, $this->filesystem); $this->setLastActivity($feed); @@ -55,37 +43,42 @@ public function feed(Feed $feed, ?OutputStyle $output = null): void } } - protected function performItem($file, Feed $feed, ?OutputStyle $output): void // @pest-ignore-type + protected function export(Feed $feed, ?OutputStyle $output, FilesystemService $filesystem): void { - $count = $feed->builder()->count(); - - // @codeCoverageIgnoreStart - $bar = $this->progressBar($count, $output); - // @codeCoverageIgnoreEnd - - $progress = $count; + (new ExportService($feed, $filesystem, $output)) + ->file( + create: $this->createFile($feed), + close : $this->closeFile($feed) + ) + ->item(fn (Model $model, int $index) => $this->converter($feed)->item( + item : $feed->item($model), + isLast: $index <= 1 + )) + ->chunk($feed->chunkSize()) + ->export(); + } - $feed->builder()->chunkById( - $feed->chunkSize(), - function (Collection $models) use ($file, $feed, $bar, &$progress) { - $content = []; + protected function createFile(Feed $feed): Closure + { + return function () use ($feed) { + $file = $this->createDraft($feed->filename()); - foreach ($models as $model) { - $content[] = $this->converter($feed)->item( - item: $feed->item($model), - isLast: $progress <= 1 - ); + $this->performHeader($file, $feed); + $this->performRoot($file, $feed, true); + $this->performInfo($file, $feed); + $this->performRoot($file, $feed, false); - $bar?->advance(); - $progress--; - } + return $file; + }; + } - $this->append($file, implode(PHP_EOL, $content), $feed->path()); - } - ); + protected function closeFile(Feed $feed): Closure + { + return function ($file, int $index) use ($feed) { + $this->performFooter($file, $feed); - $bar?->finish(); - $output?->newLine(); + $this->release($file, $feed->path($index)); + }; } protected function performHeader($file, Feed $feed): void // @pest-ignore-type @@ -161,11 +154,6 @@ protected function converter(Feed $feed): Converter ); } - protected function progressBar(int $count, ?OutputStyle $output): ?ProgressBar - { - return $output?->createProgressBar($count); - } - protected function started(Feed $feed): void { event(new FeedStartingEvent(get_class($feed))); diff --git a/tests/Feature/Feeds/Split/CsvTest.php b/tests/Feature/Feeds/Split/CsvTest.php new file mode 100644 index 0000000..495b661 --- /dev/null +++ b/tests/Feature/Feeds/Split/CsvTest.php @@ -0,0 +1,15 @@ +with('boolean'); diff --git a/tests/Feature/Feeds/Split/JsonLinesTest.php b/tests/Feature/Feeds/Split/JsonLinesTest.php new file mode 100644 index 0000000..9e47bf8 --- /dev/null +++ b/tests/Feature/Feeds/Split/JsonLinesTest.php @@ -0,0 +1,15 @@ +with('boolean'); diff --git a/tests/Feature/Feeds/Split/JsonTest.php b/tests/Feature/Feeds/Split/JsonTest.php new file mode 100644 index 0000000..d0e99b6 --- /dev/null +++ b/tests/Feature/Feeds/Split/JsonTest.php @@ -0,0 +1,15 @@ +with('boolean'); diff --git a/tests/Feature/Feeds/Split/MaxFilesTest.php b/tests/Feature/Feeds/Split/MaxFilesTest.php new file mode 100644 index 0000000..6a26f24 --- /dev/null +++ b/tests/Feature/Feeds/Split/MaxFilesTest.php @@ -0,0 +1,12 @@ +with('boolean'); diff --git a/tests/Feature/Feeds/Split/XmlTest.php b/tests/Feature/Feeds/Split/XmlTest.php new file mode 100644 index 0000000..4c25384 --- /dev/null +++ b/tests/Feature/Feeds/Split/XmlTest.php @@ -0,0 +1,14 @@ +with('boolean'); diff --git a/tests/Helpers/expects.php b/tests/Helpers/expects.php index a3e6bab..e742729 100644 --- a/tests/Helpers/expects.php +++ b/tests/Helpers/expects.php @@ -7,7 +7,7 @@ use function Pest\Laravel\artisan; -function expectFeedSnapshot(string $class, FeedFormatEnum $format = FeedFormatEnum::Xml): void +function expectFeedSnapshot(string $class, FeedFormatEnum $format = FeedFormatEnum::Xml, array $indexes = ['']): void { $feed = findFeed($class); @@ -17,17 +17,19 @@ function expectFeedSnapshot(string $class, FeedFormatEnum $format = FeedFormatEn 'feed' => $feed->id, ])->assertSuccessful()->run(); - expect($instance->path())->toBeFile(); + foreach ($indexes as $index) { + expect($instance->path($index))->toBeFile(); - $content = file_get_contents($instance->path()); + $content = file_get_contents($instance->path($index)); - match ($format) { - FeedFormatEnum::Json => expect($content)->toBeJson(), - FeedFormatEnum::JsonLines => expect($content)->toBeJsonLines(), - FeedFormatEnum::Csv => expect($content)->toBeCsv(), - FeedFormatEnum::Rss => expect($content)->toBeRss(), - default => null - }; + match ($format) { + FeedFormatEnum::Json => expect($content)->toBeJson(), + FeedFormatEnum::JsonLines => expect($content)->toBeJsonLines(), + FeedFormatEnum::Csv => expect($content)->toBeCsv(), + FeedFormatEnum::Rss => expect($content)->toBeRss(), + default => null + }; - expect($content)->toMatchSnapshot(); + expect($content)->toMatchSnapshot(); + } } diff --git a/tests/Helpers/models.php b/tests/Helpers/models.php index 20db89c..c54af03 100644 --- a/tests/Helpers/models.php +++ b/tests/Helpers/models.php @@ -8,7 +8,7 @@ function createNews(...$sequence): void { - News::factory()->count(3)->sequence( + News::factory()->count(count($sequence))->sequence( ...$sequence )->createMany(); } diff --git a/workbench/app/Feeds/SplitMaxFilesFeed.php b/workbench/app/Feeds/SplitMaxFilesFeed.php new file mode 100644 index 0000000..e59f488 --- /dev/null +++ b/workbench/app/Feeds/SplitMaxFilesFeed.php @@ -0,0 +1,30 @@ + Date: Tue, 7 Oct 2025 01:54:54 +0300 Subject: [PATCH 2/8] Added tests --- docs/snippets/advanced-directive-array-1.xml | 19 ++++++ docs/snippets/advanced-directive-array.xml | 20 +++--- .../advanced-directive-attributes-1.xml | 16 +++++ .../advanced-directive-attributes.xml | 10 +-- docs/snippets/advanced-directive-cdata-1.xml | 13 ++++ docs/snippets/advanced-directive-cdata.xml | 8 +-- docs/snippets/advanced-directive-mixed-1.xml | 19 ++++++ docs/snippets/advanced-directive-mixed.xml | 8 +-- docs/snippets/advanced-directive-value-1.xml | 13 ++++ docs/snippets/advanced-directive-value.xml | 8 +-- .../snippets/advanced-element-attribute-1.xml | 13 ++++ docs/snippets/advanced-element-attribute.xml | 8 +-- .../advanced-element-header-footer-1.xml | 15 +++++ .../advanced-element-header-footer.xml | 4 +- docs/snippets/advanced-element-info-1.xml | 16 +++++ .../advanced-element-info-before-false-1.xml | 16 +++++ .../advanced-element-info-before-false.xml | 4 +- docs/snippets/advanced-element-info.xml | 4 +- docs/snippets/advanced-element-root-1.xml | 13 ++++ docs/snippets/advanced-element-root.xml | 4 +- docs/snippets/receipt-instagram-feed-1.xml | 59 ++++++++++++++++ docs/snippets/receipt-instagram-feed.xml | 4 +- docs/snippets/receipt-rss-feed-1.xml | 34 ++++++++++ docs/snippets/receipt-rss-feed.xml | 13 +++- docs/snippets/receipt-sitemap-feed-1.xml | 15 +++++ docs/snippets/receipt-sitemap-feed.xml | 4 +- docs/snippets/receipt-yandex-feed-1.xml | 47 +++++++++++++ docs/snippets/receipt-yandex-feed.xml | 4 +- src/Services/ExportService.php | 18 +++-- src/Services/GeneratorService.php | 4 +- .../export_with_data_set____false__.snap | 0 .../export_with_data_set____true__.snap | 0 .../export_with_data_set____true__.snap | 26 ------- .../export_with_data_set____false__.snap | 6 -- .../export_with_data_set____true__.snap | 65 ------------------ .../export_with_data_set____false__.snap | 8 --- .../export_with_data_set____true__.snap | 67 ------------------- .../export_with_data_set____true__.snap | 28 -------- .../Feature/Feeds/Split/CsvTest/export.snap | 2 + .../Feeds/Split/CsvTest/export__2.snap | 1 + .../JsonLinesTest/export.snap} | 9 +-- .../Feeds/Split/JsonLinesTest/export__2.snap | 1 + .../JsonTest/export.snap} | 3 +- .../Feeds/Split/JsonTest/export__2.snap | 3 + .../Feeds/Split/MaxFilesTest/export.snap | 1 + .../Feeds/Split/PerFileTest/export.snap | 2 + .../Feeds/Split/PerFileTest/export__2.snap | 1 + .../Feature/Feeds/Split/RssTest/export.snap | 23 +++++++ .../Feeds/Split/RssTest/export__2.snap | 15 +++++ .../Feature/Feeds/Split/XmlTest/export.snap | 41 ++++++++++++ .../Feeds/Split/XmlTest/export__2.snap | 23 +++++++ tests/Feature/Feeds/Split/CsvTest.php | 10 ++- tests/Feature/Feeds/Split/JsonLinesTest.php | 10 ++- tests/Feature/Feeds/Split/JsonTest.php | 10 +-- tests/Feature/Feeds/Split/RssTest.php | 10 ++- tests/Feature/Feeds/Split/XmlTest.php | 10 ++- workbench/app/Feeds/SplitCsvFeed.php | 33 +++++++++ workbench/app/Feeds/SplitJsonFeed.php | 33 +++++++++ workbench/app/Feeds/SplitJsonLinesFeed.php | 33 +++++++++ workbench/app/Feeds/SplitRssFeed.php | 54 +++++++++++++++ workbench/app/Feeds/SplitXmlFeed.php | 40 +++++++++++ workbench/database/seeders/FeedSeeder.php | 10 +++ 62 files changed, 719 insertions(+), 292 deletions(-) create mode 100644 docs/snippets/advanced-directive-array-1.xml create mode 100644 docs/snippets/advanced-directive-attributes-1.xml create mode 100644 docs/snippets/advanced-directive-cdata-1.xml create mode 100644 docs/snippets/advanced-directive-mixed-1.xml create mode 100644 docs/snippets/advanced-directive-value-1.xml create mode 100644 docs/snippets/advanced-element-attribute-1.xml create mode 100644 docs/snippets/advanced-element-header-footer-1.xml create mode 100644 docs/snippets/advanced-element-info-1.xml create mode 100644 docs/snippets/advanced-element-info-before-false-1.xml create mode 100644 docs/snippets/advanced-element-root-1.xml create mode 100644 docs/snippets/receipt-instagram-feed-1.xml create mode 100644 docs/snippets/receipt-rss-feed-1.xml create mode 100644 docs/snippets/receipt-sitemap-feed-1.xml create mode 100644 docs/snippets/receipt-yandex-feed-1.xml delete mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set____false__.snap delete mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set____true__.snap delete mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set____true__.snap delete mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set____false__.snap delete mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set____true__.snap delete mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set____false__.snap delete mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set____true__.snap delete mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set____true__.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export__2.snap rename tests/.pest/snapshots/Feature/Feeds/{Formats/Json/RootTest/export_with_data_set____false__.snap => Split/JsonLinesTest/export.snap} (56%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/JsonLinesTest/export__2.snap rename tests/.pest/snapshots/Feature/Feeds/{Formats/Json/DefaultTest/export_with_data_set____false__.snap => Split/JsonTest/export.snap} (66%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/JsonTest/export__2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export__2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export__2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export__2.snap create mode 100644 workbench/app/Feeds/SplitCsvFeed.php create mode 100644 workbench/app/Feeds/SplitJsonFeed.php create mode 100644 workbench/app/Feeds/SplitJsonLinesFeed.php create mode 100644 workbench/app/Feeds/SplitRssFeed.php create mode 100644 workbench/app/Feeds/SplitXmlFeed.php diff --git a/docs/snippets/advanced-directive-array-1.xml b/docs/snippets/advanced-directive-array-1.xml new file mode 100644 index 0000000..b250e82 --- /dev/null +++ b/docs/snippets/advanced-directive-array-1.xml @@ -0,0 +1,19 @@ + + + + + Cedrick Stoltenberg + https://via.placeholder.com/640x480.png/006611?text=sapiente + https://via.placeholder.com/640x480.png/0099aa?text=voluptates + https://via.placeholder.com/640x480.png/008833?text=facere + https://via.placeholder.com/640x480.png/005500?text=illo + + + Cale Murazik + https://via.placeholder.com/640x480.png/00bb22?text=nisi + https://via.placeholder.com/640x480.png/0022aa?text=illo + https://via.placeholder.com/640x480.png/0066ee?text=omnis + https://via.placeholder.com/640x480.png/0099bb?text=maxime + + + diff --git a/docs/snippets/advanced-directive-array.xml b/docs/snippets/advanced-directive-array.xml index 87fed3b..ed42be1 100644 --- a/docs/snippets/advanced-directive-array.xml +++ b/docs/snippets/advanced-directive-array.xml @@ -2,18 +2,18 @@ - Dr. Mozelle Hand V - https://via.placeholder.com/640x480.png/00ddee?text=iste - https://via.placeholder.com/640x480.png/00aaaa?text=dolorem - https://via.placeholder.com/640x480.png/002288?text=quasi - https://via.placeholder.com/640x480.png/00aa66?text=explicabo + Cyril Kunze + https://via.placeholder.com/640x480.png/0044bb?text=sit + https://via.placeholder.com/640x480.png/0055ee?text=accusantium + https://via.placeholder.com/640x480.png/00dd22?text=qui + https://via.placeholder.com/640x480.png/0011dd?text=molestias - Lori Gislason - https://via.placeholder.com/640x480.png/001144?text=nostrum - https://via.placeholder.com/640x480.png/002200?text=numquam - https://via.placeholder.com/640x480.png/005544?text=consequatur - https://via.placeholder.com/640x480.png/0011dd?text=maiores + Norberto Cassin I + https://via.placeholder.com/640x480.png/006622?text=in + https://via.placeholder.com/640x480.png/009988?text=qui + https://via.placeholder.com/640x480.png/003300?text=ipsam + https://via.placeholder.com/640x480.png/00dd88?text=similique diff --git a/docs/snippets/advanced-directive-attributes-1.xml b/docs/snippets/advanced-directive-attributes-1.xml new file mode 100644 index 0000000..9854d56 --- /dev/null +++ b/docs/snippets/advanced-directive-attributes-1.xml @@ -0,0 +1,16 @@ + + + + +https://example.com + + + Mr. Cameron Nader + + + + Prof. Ernestine Murphy MD + + + + diff --git a/docs/snippets/advanced-directive-attributes.xml b/docs/snippets/advanced-directive-attributes.xml index ff4fc6c..6f8f833 100644 --- a/docs/snippets/advanced-directive-attributes.xml +++ b/docs/snippets/advanced-directive-attributes.xml @@ -1,16 +1,16 @@ - + https://example.com - Doyle Donnelly - + Ada Klocko + - Sally Pagac Sr. - + Garrett Yost + diff --git a/docs/snippets/advanced-directive-cdata-1.xml b/docs/snippets/advanced-directive-cdata-1.xml new file mode 100644 index 0000000..9b52be0 --- /dev/null +++ b/docs/snippets/advanced-directive-cdata-1.xml @@ -0,0 +1,13 @@ + + + + + Oral Lang]]> + margie.bartell@example.net + + + Prof. Kellen Schroeder DDS]]> + awindler@example.net + + + diff --git a/docs/snippets/advanced-directive-cdata.xml b/docs/snippets/advanced-directive-cdata.xml index edf02ce..4aa67c2 100644 --- a/docs/snippets/advanced-directive-cdata.xml +++ b/docs/snippets/advanced-directive-cdata.xml @@ -2,12 +2,12 @@ - Sallie Price]]> - ssporer@example.net + Thalia Baumbach]]> + fermin.crooks@example.com - Dr. Nedra Weimann]]> - beau.feest@example.net + Pauline Dicki]]> + bkuhic@example.org diff --git a/docs/snippets/advanced-directive-mixed-1.xml b/docs/snippets/advanced-directive-mixed-1.xml new file mode 100644 index 0000000..9e466c0 --- /dev/null +++ b/docs/snippets/advanced-directive-mixed-1.xml @@ -0,0 +1,19 @@ + + + + + Rod Mraz III + + Foo + winona.fay@example.com + + + + Chelsey Wintheiser + + Foo + else71@example.com + + + + diff --git a/docs/snippets/advanced-directive-mixed.xml b/docs/snippets/advanced-directive-mixed.xml index 7b97f98..f50f87d 100644 --- a/docs/snippets/advanced-directive-mixed.xml +++ b/docs/snippets/advanced-directive-mixed.xml @@ -2,17 +2,17 @@ - Bradley Krajcik + Dewitt Brown Foo - alexander73@example.net + lakin.augusta@example.com - Jamil Hilpert PhD + Bessie DuBuque Foo - vwalsh@example.net + ali52@example.org diff --git a/docs/snippets/advanced-directive-value-1.xml b/docs/snippets/advanced-directive-value-1.xml new file mode 100644 index 0000000..272cd5c --- /dev/null +++ b/docs/snippets/advanced-directive-value-1.xml @@ -0,0 +1,13 @@ + + + + + Onie Hahn + mozelle.eichmann@example.com + + + Heaven Hauck + grady.rocky@example.org + + + diff --git a/docs/snippets/advanced-directive-value.xml b/docs/snippets/advanced-directive-value.xml index eec4b5d..8950115 100644 --- a/docs/snippets/advanced-directive-value.xml +++ b/docs/snippets/advanced-directive-value.xml @@ -2,12 +2,12 @@ - Mr. Cyril Douglas - grant.kassulke@example.com + Johnson Schoen + hamill.myrtie@example.com - Prof. Camille Veum DVM - hfranecki@example.com + Morton Abernathy + randall.corkery@example.com diff --git a/docs/snippets/advanced-element-attribute-1.xml b/docs/snippets/advanced-element-attribute-1.xml new file mode 100644 index 0000000..953531a --- /dev/null +++ b/docs/snippets/advanced-element-attribute-1.xml @@ -0,0 +1,13 @@ + + + + + 1 + Elody Durgan + + + 2 + Cierra Bauch + + + diff --git a/docs/snippets/advanced-element-attribute.xml b/docs/snippets/advanced-element-attribute.xml index e1c5321..098d7a4 100644 --- a/docs/snippets/advanced-element-attribute.xml +++ b/docs/snippets/advanced-element-attribute.xml @@ -1,13 +1,13 @@ - + 1 - Efren Prosacco + Mrs. Janet Kuhn - + 2 - Elwyn Kuphal DDS + Kristin Gleason diff --git a/docs/snippets/advanced-element-header-footer-1.xml b/docs/snippets/advanced-element-header-footer-1.xml new file mode 100644 index 0000000..d48e863 --- /dev/null +++ b/docs/snippets/advanced-element-header-footer-1.xml @@ -0,0 +1,15 @@ + + + + + 1 + Paxton Bradtke + + + 2 + Riley Grant III + + + + +This is a custom footer element \ No newline at end of file diff --git a/docs/snippets/advanced-element-header-footer.xml b/docs/snippets/advanced-element-header-footer.xml index 50010f8..8d2065a 100644 --- a/docs/snippets/advanced-element-header-footer.xml +++ b/docs/snippets/advanced-element-header-footer.xml @@ -3,11 +3,11 @@ 1 - Arnaldo Mohr + Dr. Jordyn Hintz 2 - Dillan Beahan + Garland Mraz IV diff --git a/docs/snippets/advanced-element-info-1.xml b/docs/snippets/advanced-element-info-1.xml new file mode 100644 index 0000000..bb7e763 --- /dev/null +++ b/docs/snippets/advanced-element-info-1.xml @@ -0,0 +1,16 @@ + + + +Laravel +https://example.com + + + 1 + Mr. Odell Keeling MD + + + 2 + Cesar Swaniawski + + + diff --git a/docs/snippets/advanced-element-info-before-false-1.xml b/docs/snippets/advanced-element-info-before-false-1.xml new file mode 100644 index 0000000..4270321 --- /dev/null +++ b/docs/snippets/advanced-element-info-before-false-1.xml @@ -0,0 +1,16 @@ + +Laravel +https://example.com + + + + + 1 + Mr. Grayce Borer IV + + + 2 + Melissa Windler PhD + + + diff --git a/docs/snippets/advanced-element-info-before-false.xml b/docs/snippets/advanced-element-info-before-false.xml index 1ce5b52..11e53cb 100644 --- a/docs/snippets/advanced-element-info-before-false.xml +++ b/docs/snippets/advanced-element-info-before-false.xml @@ -6,11 +6,11 @@ 1 - Hilton Rath + Willy Wilkinson 2 - Prof. Juanita Oberbrunner + Delphine Mohr diff --git a/docs/snippets/advanced-element-info.xml b/docs/snippets/advanced-element-info.xml index 091c75b..4a9b800 100644 --- a/docs/snippets/advanced-element-info.xml +++ b/docs/snippets/advanced-element-info.xml @@ -6,11 +6,11 @@ 1 - Sigurd Mueller + Neha Pfannerstill V 2 - Kiera Hansen + Quincy Walter diff --git a/docs/snippets/advanced-element-root-1.xml b/docs/snippets/advanced-element-root-1.xml new file mode 100644 index 0000000..17d5472 --- /dev/null +++ b/docs/snippets/advanced-element-root-1.xml @@ -0,0 +1,13 @@ + + + + + 1 + Trenton Larson + + + 2 + Xzavier Spinka Jr. + + + diff --git a/docs/snippets/advanced-element-root.xml b/docs/snippets/advanced-element-root.xml index 15edaaf..780dfb6 100644 --- a/docs/snippets/advanced-element-root.xml +++ b/docs/snippets/advanced-element-root.xml @@ -3,11 +3,11 @@ 1 - Darby Davis MD + Verna Goldner DVM 2 - Dr. Mattie Rippin + Dr. Samara Ziemann II diff --git a/docs/snippets/receipt-instagram-feed-1.xml b/docs/snippets/receipt-instagram-feed-1.xml new file mode 100644 index 0000000..cea1bd6 --- /dev/null +++ b/docs/snippets/receipt-instagram-feed-1.xml @@ -0,0 +1,59 @@ + + + Laravel + https://example.com + + + + 1 + + + https://example.com/products/in-illum-dolores-officiis-ea + https://via.placeholder.com/640x480.png/008877?text=repudiandae + https://via.placeholder.com/640x480.png/008877?text=repudiandae + The Best + new + in stock + 100 + 100 + 12345 + active + 123 + 456 + Some foo + Some bar + Some baz + a + b + c + + + 2 + + + https://example.com/products/ut-adipisci-consectetur-non-et + https://via.placeholder.com/640x480.png/009966?text=beatae + https://via.placeholder.com/640x480.png/009966?text=beatae + https://via.placeholder.com/640x480.png/000011?text=deleniti + https://via.placeholder.com/640x480.png/009999?text=voluptates + The Best + new + in stock + 250 + 250 + 12345 + active + 123 + 456 + Some foo + Some bar + Some baz + a + b + c + + + + + + \ No newline at end of file diff --git a/docs/snippets/receipt-instagram-feed.xml b/docs/snippets/receipt-instagram-feed.xml index 680585c..b8dfa84 100644 --- a/docs/snippets/receipt-instagram-feed.xml +++ b/docs/snippets/receipt-instagram-feed.xml @@ -8,7 +8,7 @@ 1 - https://example.com/products/ratione-minima-officia-adipisci-ratione-consectetur + https://example.com/products/qui-ut-ratione-sed-et-ratione https://via.placeholder.com/640x480.png/008877?text=repudiandae https://via.placeholder.com/640x480.png/008877?text=repudiandae The Best @@ -31,7 +31,7 @@ 2 - https://example.com/products/accusamus-animi-animi-earum-quis + https://example.com/products/sunt-magnam-dolores-a-omnis https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/000011?text=deleniti diff --git a/docs/snippets/receipt-rss-feed-1.xml b/docs/snippets/receipt-rss-feed-1.xml new file mode 100644 index 0000000..8836509 --- /dev/null +++ b/docs/snippets/receipt-rss-feed-1.xml @@ -0,0 +1,34 @@ + + + + + + Some 1 + https://example.com/news/some-1 + 1 + + Some category 1 + Wed, 03 Sep 2025 18:52:32 +0000 + bar + + + Some 2 + https://example.com/news/some-2 + 2 + + Some category 2 + Wed, 03 Sep 2025 13:19:41 +0000 + bar + + + Some 3 + https://example.com/news/some-3 + 3 + + Some category 3 + Thu, 04 Sep 2025 03:28:15 +0000 + bar + + + + \ No newline at end of file diff --git a/docs/snippets/receipt-rss-feed.xml b/docs/snippets/receipt-rss-feed.xml index 0890dff..2f3e4e5 100644 --- a/docs/snippets/receipt-rss-feed.xml +++ b/docs/snippets/receipt-rss-feed.xml @@ -8,7 +8,7 @@ 1 Some category 1 - Wed, 03 Sep 2025 13:26:59 +0000 + Wed, 03 Sep 2025 11:09:19 +0000 bar @@ -17,7 +17,16 @@ 2 Some category 2 - Wed, 03 Sep 2025 14:17:03 +0000 + Wed, 03 Sep 2025 22:21:20 +0000 + bar + + + Some 3 + https://example.com/news/some-3 + 3 + + Some category 3 + Wed, 03 Sep 2025 23:36:51 +0000 bar diff --git a/docs/snippets/receipt-sitemap-feed-1.xml b/docs/snippets/receipt-sitemap-feed-1.xml new file mode 100644 index 0000000..62a4bee --- /dev/null +++ b/docs/snippets/receipt-sitemap-feed-1.xml @@ -0,0 +1,15 @@ + + + + + https://example.com/products/reiciendis-animi-ut-voluptatem-quaerat-odit-suscipit + 2025-08-31T20:00:00+00:00 + 0.9 + + + https://example.com/products/consequatur-beatae-non-sint-totam-voluptatem + 2025-08-30T19:00:00+00:00 + 0.9 + + + diff --git a/docs/snippets/receipt-sitemap-feed.xml b/docs/snippets/receipt-sitemap-feed.xml index 2a28a0f..491d3a4 100644 --- a/docs/snippets/receipt-sitemap-feed.xml +++ b/docs/snippets/receipt-sitemap-feed.xml @@ -2,12 +2,12 @@ - https://example.com/products/dolor-culpa-reiciendis-illo-magnam-nisi-quisquam-labore-aspernatur + https://example.com/products/voluptatem-dolores-iure-sint-autem-dolores-quo-itaque 2025-08-31T20:00:00+00:00 0.9 - https://example.com/products/quas-tempora-quia-animi-veniam-tempore-et-at + https://example.com/products/veritatis-voluptates-officiis-aperiam-voluptas-vel-non 2025-08-30T19:00:00+00:00 0.9 diff --git a/docs/snippets/receipt-yandex-feed-1.xml b/docs/snippets/receipt-yandex-feed-1.xml new file mode 100644 index 0000000..f3db52c --- /dev/null +++ b/docs/snippets/receipt-yandex-feed-1.xml @@ -0,0 +1,47 @@ + + + +My App +My Company +My Platform +https://example.com +feeds@example.com + + + + + Foo + Bar + +bar + + + + + https://example.com/products/qui-sunt-nihil-placeat-numquam-rerum-laboriosam-dolores-aliquid + GD-PRDCT-1 + Some 1 + Some description 1 + 100 + RUR + The Best + https://via.placeholder.com/640x480.png/008877?text=repudiandae + bar + + + https://example.com/products/laudantium-perferendis-error-ad-explicabo-eos-aspernatur + GD-PRDCT-2 + Some 2 + Some description 2 + 250 + RUR + The Best + https://via.placeholder.com/640x480.png/009966?text=beatae + https://via.placeholder.com/640x480.png/000011?text=deleniti + https://via.placeholder.com/640x480.png/009999?text=voluptates + bar + + + + + \ No newline at end of file diff --git a/docs/snippets/receipt-yandex-feed.xml b/docs/snippets/receipt-yandex-feed.xml index 0f47c65..d66edda 100644 --- a/docs/snippets/receipt-yandex-feed.xml +++ b/docs/snippets/receipt-yandex-feed.xml @@ -18,7 +18,7 @@ - https://example.com/products/ipsa-maiores-odit-dicta-temporibus-et-rerum + https://example.com/products/a-doloremque-et-nihil GD-PRDCT-1 Some 1 Some description 1 @@ -29,7 +29,7 @@ bar - https://example.com/products/quo-rerum-qui-eos-eius-quaerat-voluptatem-et + https://example.com/products/pariatur-molestiae-vitae-odit-qui GD-PRDCT-2 Some 2 Some description 2 diff --git a/src/Services/ExportService.php b/src/Services/ExportService.php index 8cf84bb..670cb57 100644 --- a/src/Services/ExportService.php +++ b/src/Services/ExportService.php @@ -13,6 +13,7 @@ use function blank; use function implode; use function max; +use function min; use function value; class ExportService @@ -90,7 +91,7 @@ public function export(): void $this->records++; $this->total--; - $this->content[] = value($this->item, $model, $this->line); + $this->content[] = value($this->item, $model, $this->isLastItem()); $this->store(); @@ -98,9 +99,9 @@ public function export(): void return false; } - //if ($this->maxFiles && $this->file >= $this->maxFiles) { - // return false; - //} + if ($this->maxFiles && $this->file >= $this->maxFiles) { + return false; + } }); $this->store(true); @@ -125,6 +126,11 @@ protected function store(bool $force = false): void } } + protected function isLastItem(): bool + { + return $this->line >= min($this->perFile, $this->total); + } + protected function getFile() // @pest-ignore-type { if (! empty($this->resource)) { @@ -140,7 +146,9 @@ protected function releaseFile(): void return; } - value($this->closeFile, $this->resource, $this->file); + $index = $this->maxFiles ? $this->file : 0; + + value($this->closeFile, $this->resource, $index); $this->resource = null; diff --git a/src/Services/GeneratorService.php b/src/Services/GeneratorService.php index 140fb6c..cb46b9b 100644 --- a/src/Services/GeneratorService.php +++ b/src/Services/GeneratorService.php @@ -50,9 +50,9 @@ protected function export(Feed $feed, ?OutputStyle $output, FilesystemService $f create: $this->createFile($feed), close : $this->closeFile($feed) ) - ->item(fn (Model $model, int $index) => $this->converter($feed)->item( + ->item(fn (Model $model, bool $last) => $this->converter($feed)->item( item : $feed->item($model), - isLast: $index <= 1 + isLast: $last )) ->chunk($feed->chunkSize()) ->export(); diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set____false__.snap deleted file mode 100644 index e69de29..0000000 diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set____true__.snap deleted file mode 100644 index e69de29..0000000 diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set____true__.snap deleted file mode 100644 index 8e62410..0000000 --- a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set____true__.snap +++ /dev/null @@ -1,26 +0,0 @@ -[ -{ - "id": 1, - "title": "Some 1", - "content": "Some content 1", - "category": "Some category 1", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -}, -{ - "id": 2, - "title": "Some 2", - "content": "Some content 2", - "category": "Some category 2", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -}, -{ - "id": 3, - "title": "Some 3", - "content": "Some content 3", - "category": "Some category 3", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -} -] diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set____false__.snap deleted file mode 100644 index 0194d9c..0000000 --- a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set____false__.snap +++ /dev/null @@ -1,6 +0,0 @@ -[ -{"name":"Laravel","company":"Laravel","platform":"Laravel","url":"https://example.com","email":"test@example.com","currencies":{"@currency":[{"@attributes":{"id":"RUR","rate":"1"}}]},"categories":{"@category":[{"@attributes":{"id":41},"@value":"Домашние майки"},{"@attributes":{"id":539},"@value":"Велосипедки"},{"@attributes":{"id":44},"@value":"Ремни"}]}}, -{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, -{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, -{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} -] diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set____true__.snap deleted file mode 100644 index f7359a7..0000000 --- a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set____true__.snap +++ /dev/null @@ -1,65 +0,0 @@ -[ -{ - "name": "Laravel", - "company": "Laravel", - "platform": "Laravel", - "url": "https://example.com", - "email": "test@example.com", - "currencies": { - "@currency": [ - { - "@attributes": { - "id": "RUR", - "rate": "1" - } - } - ] - }, - "categories": { - "@category": [ - { - "@attributes": { - "id": 41 - }, - "@value": "Домашние майки" - }, - { - "@attributes": { - "id": 539 - }, - "@value": "Велосипедки" - }, - { - "@attributes": { - "id": 44 - }, - "@value": "Ремни" - } - ] - } -}, -{ - "id": 1, - "title": "Some 1", - "content": "Some content 1", - "category": "Some category 1", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -}, -{ - "id": 2, - "title": "Some 2", - "content": "Some content 2", - "category": "Some category 2", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -}, -{ - "id": 3, - "title": "Some 3", - "content": "Some content 3", - "category": "Some category 3", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -} -] diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set____false__.snap deleted file mode 100644 index 37f763e..0000000 --- a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set____false__.snap +++ /dev/null @@ -1,8 +0,0 @@ -{ -"name":"Laravel","company":"Laravel","platform":"Laravel","url":"https://example.com","email":"test@example.com","currencies":{"@currency":[{"@attributes":{"id":"RUR","rate":"1"}}]},"categories":{"@category":[{"@attributes":{"id":41},"@value":"Домашние майки"},{"@attributes":{"id":539},"@value":"Велосипедки"},{"@attributes":{"id":44},"@value":"Ремни"}]}, -"items": [ -{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, -{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, -{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} -] -} diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set____true__.snap deleted file mode 100644 index 6beb376..0000000 --- a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set____true__.snap +++ /dev/null @@ -1,67 +0,0 @@ -{ - - "name": "Laravel", - "company": "Laravel", - "platform": "Laravel", - "url": "https://example.com", - "email": "test@example.com", - "currencies": { - "@currency": [ - { - "@attributes": { - "id": "RUR", - "rate": "1" - } - } - ] - }, - "categories": { - "@category": [ - { - "@attributes": { - "id": 41 - }, - "@value": "Домашние майки" - }, - { - "@attributes": { - "id": 539 - }, - "@value": "Велосипедки" - }, - { - "@attributes": { - "id": 44 - }, - "@value": "Ремни" - } - ] - } -, -"items": [ -{ - "id": 1, - "title": "Some 1", - "content": "Some content 1", - "category": "Some category 1", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -}, -{ - "id": 2, - "title": "Some 2", - "content": "Some content 2", - "category": "Some category 2", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -}, -{ - "id": 3, - "title": "Some 3", - "content": "Some content 3", - "category": "Some category 3", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -} -] -} diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set____true__.snap deleted file mode 100644 index 77e1f56..0000000 --- a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set____true__.snap +++ /dev/null @@ -1,28 +0,0 @@ -{ -"items": [ -{ - "id": 1, - "title": "Some 1", - "content": "Some content 1", - "category": "Some category 1", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -}, -{ - "id": 2, - "title": "Some 2", - "content": "Some content 2", - "category": "Some category 2", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -}, -{ - "id": 3, - "title": "Some 3", - "content": "Some content 3", - "category": "Some category 3", - "created_at": "2025-09-04T04:08:12.000000Z", - "updated_at": "2025-09-04T04:08:12.000000Z" -} -] -} diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export.snap b/tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export.snap new file mode 100644 index 0000000..2b0dc4b --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export.snap @@ -0,0 +1,2 @@ +1;Some 1;Some content 1;Some category 1;2025-09-04T04:08:12.000000Z;2025-09-04T04:08:12.000000Z +2;Some 2;Some content 2;Some category 2;2025-09-04T04:08:12.000000Z;2025-09-04T04:08:12.000000Z \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export__2.snap b/tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export__2.snap new file mode 100644 index 0000000..36e59ef --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export__2.snap @@ -0,0 +1 @@ +3;Some 3;Some content 3;Some category 3;2025-09-04T04:08:12.000000Z;2025-09-04T04:08:12.000000Z \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Split/JsonLinesTest/export.snap similarity index 56% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Split/JsonLinesTest/export.snap index 1a8e82e..0385f70 100644 --- a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set____false__.snap +++ b/tests/.pest/snapshots/Feature/Feeds/Split/JsonLinesTest/export.snap @@ -1,7 +1,2 @@ -{ -"items": [ -{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, -{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, -{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} -] -} +{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} +{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/JsonLinesTest/export__2.snap b/tests/.pest/snapshots/Feature/Feeds/Split/JsonLinesTest/export__2.snap new file mode 100644 index 0000000..df5d32a --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/JsonLinesTest/export__2.snap @@ -0,0 +1 @@ +{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Split/JsonTest/export.snap similarity index 66% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Split/JsonTest/export.snap index e2ca44d..971a0b0 100644 --- a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set____false__.snap +++ b/tests/.pest/snapshots/Feature/Feeds/Split/JsonTest/export.snap @@ -1,5 +1,4 @@ [ {"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, -{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, -{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} +{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} ] diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/JsonTest/export__2.snap b/tests/.pest/snapshots/Feature/Feeds/Split/JsonTest/export__2.snap new file mode 100644 index 0000000..df1c334 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/JsonTest/export__2.snap @@ -0,0 +1,3 @@ +[ +{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} +] diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export.snap b/tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export.snap new file mode 100644 index 0000000..e5706ae --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export.snap @@ -0,0 +1 @@ +{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export.snap b/tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export.snap new file mode 100644 index 0000000..0385f70 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export.snap @@ -0,0 +1,2 @@ +{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} +{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export__2.snap b/tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export__2.snap new file mode 100644 index 0000000..df5d32a --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export__2.snap @@ -0,0 +1 @@ +{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export.snap b/tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export.snap new file mode 100644 index 0000000..8631673 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export.snap @@ -0,0 +1,23 @@ + + + + + + Some 1 + https://example.com/news/some-1 + https://example.com/news/some-1 + + Some category 1 + Thu, 04 Sep 2025 04:08:12 +0000 + + + Some 2 + https://example.com/news/some-2 + https://example.com/news/some-2 + + Some category 2 + Thu, 04 Sep 2025 04:08:12 +0000 + + + + \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export__2.snap b/tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export__2.snap new file mode 100644 index 0000000..45af7ca --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export__2.snap @@ -0,0 +1,15 @@ + + + + + + Some 3 + https://example.com/news/some-3 + https://example.com/news/some-3 + + Some category 3 + Thu, 04 Sep 2025 04:08:12 +0000 + + + + \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export.snap b/tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export.snap new file mode 100644 index 0000000..1d8cbba --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export.snap @@ -0,0 +1,41 @@ + + + + + [NEWS]:Some 1 + Some content 1 + Some extra data + + + Luke Skywalker + Lightsaber + + + Sauron]]> + Evil Eye + + + line +line with some html/xml tag +line with & symbol + + + [NEWS]:Some 2 + Some content 2 + Some extra data + + + Luke Skywalker + Lightsaber + + + Sauron]]> + Evil Eye + + + line +line with some html/xml tag +line with & symbol + + + diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export__2.snap b/tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export__2.snap new file mode 100644 index 0000000..fca5fbb --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export__2.snap @@ -0,0 +1,23 @@ + + + + + [NEWS]:Some 3 + Some content 3 + Some extra data + + + Luke Skywalker + Lightsaber + + + Sauron]]> + Evil Eye + + + line +line with some html/xml tag +line with & symbol + + + diff --git a/tests/Feature/Feeds/Split/CsvTest.php b/tests/Feature/Feeds/Split/CsvTest.php index 495b661..b0b8309 100644 --- a/tests/Feature/Feeds/Split/CsvTest.php +++ b/tests/Feature/Feeds/Split/CsvTest.php @@ -4,12 +4,10 @@ use DragonCode\LaravelFeed\Enums\FeedFormatEnum; use Workbench\App\Data\NewsFakeData; -use Workbench\App\Feeds\CsvFeed; - -test('export', function (bool $pretty) { - setPrettyXml($pretty); +use Workbench\App\Feeds\SplitCsvFeed; +test('export', function () { createNews(...NewsFakeData::toArray()); - //expectFeedSnapshot(CsvFeed::class, FeedFormatEnum::Csv); -})->with('boolean'); + expectFeedSnapshot(SplitCsvFeed::class, FeedFormatEnum::Csv, indexes: [1, 2]); +}); diff --git a/tests/Feature/Feeds/Split/JsonLinesTest.php b/tests/Feature/Feeds/Split/JsonLinesTest.php index 9e47bf8..6081d45 100644 --- a/tests/Feature/Feeds/Split/JsonLinesTest.php +++ b/tests/Feature/Feeds/Split/JsonLinesTest.php @@ -4,12 +4,10 @@ use DragonCode\LaravelFeed\Enums\FeedFormatEnum; use Workbench\App\Data\NewsFakeData; -use Workbench\App\Feeds\JsonLinesFeed; - -test('export', function (bool $pretty) { - setPrettyXml($pretty); +use Workbench\App\Feeds\SplitJsonLinesFeed; +test('export', function () { createNews(...NewsFakeData::toArray()); - //expectFeedSnapshot(JsonLinesFeed::class, FeedFormatEnum::JsonLines); -})->with('boolean'); + expectFeedSnapshot(SplitJsonLinesFeed::class, FeedFormatEnum::JsonLines, indexes: [1, 2]); +}); diff --git a/tests/Feature/Feeds/Split/JsonTest.php b/tests/Feature/Feeds/Split/JsonTest.php index d0e99b6..515ff41 100644 --- a/tests/Feature/Feeds/Split/JsonTest.php +++ b/tests/Feature/Feeds/Split/JsonTest.php @@ -4,12 +4,12 @@ use DragonCode\LaravelFeed\Enums\FeedFormatEnum; use Workbench\App\Data\NewsFakeData; -use Workbench\App\Feeds\JsonFeed; +use Workbench\App\Feeds\SplitJsonFeed; -test('export', function (bool $pretty) { - setPrettyXml($pretty); +test('export', function () { + setPrettyXml(false); createNews(...NewsFakeData::toArray()); - //expectFeedSnapshot(JsonFeed::class, FeedFormatEnum::Json); -})->with('boolean'); + expectFeedSnapshot(SplitJsonFeed::class, FeedFormatEnum::Json, indexes: [1, 2]); +}); diff --git a/tests/Feature/Feeds/Split/RssTest.php b/tests/Feature/Feeds/Split/RssTest.php index e68b258..c72c092 100644 --- a/tests/Feature/Feeds/Split/RssTest.php +++ b/tests/Feature/Feeds/Split/RssTest.php @@ -4,12 +4,10 @@ use DragonCode\LaravelFeed\Enums\FeedFormatEnum; use Workbench\App\Data\NewsFakeData; -use Workbench\App\Feeds\RssFeed; - -test('export', function (bool $pretty) { - setPrettyXml($pretty); +use Workbench\App\Feeds\SplitRssFeed; +test('export', function () { createNews(...NewsFakeData::toArray()); - //expectFeedSnapshot(RssFeed::class, FeedFormatEnum::Rss); -})->with('boolean'); + expectFeedSnapshot(SplitRssFeed::class, FeedFormatEnum::Rss, indexes: [1, 2]); +}); diff --git a/tests/Feature/Feeds/Split/XmlTest.php b/tests/Feature/Feeds/Split/XmlTest.php index 4c25384..13ff257 100644 --- a/tests/Feature/Feeds/Split/XmlTest.php +++ b/tests/Feature/Feeds/Split/XmlTest.php @@ -3,12 +3,10 @@ declare(strict_types=1); use Workbench\App\Data\NewsFakeData; -use Workbench\App\Feeds\FullFeed; - -test('export', function (bool $pretty) { - setPrettyXml($pretty); +use Workbench\App\Feeds\SplitXmlFeed; +test('export', function () { createNews(...NewsFakeData::toArray()); - //expectFeedSnapshot(FullFeed::class); -})->with('boolean'); + expectFeedSnapshot(SplitXmlFeed::class, indexes: [1, 2]); +}); diff --git a/workbench/app/Feeds/SplitCsvFeed.php b/workbench/app/Feeds/SplitCsvFeed.php new file mode 100644 index 0000000..96bbfa5 --- /dev/null +++ b/workbench/app/Feeds/SplitCsvFeed.php @@ -0,0 +1,33 @@ +', + '', + ]); + } + + public function footer(): string + { + return ''; + } +} diff --git a/workbench/app/Feeds/SplitXmlFeed.php b/workbench/app/Feeds/SplitXmlFeed.php new file mode 100644 index 0000000..eeaecb1 --- /dev/null +++ b/workbench/app/Feeds/SplitXmlFeed.php @@ -0,0 +1,40 @@ + Date: Sat, 1 Nov 2025 00:12:24 +0300 Subject: [PATCH 3/8] Refactored `ExportService` and updated various feed and test files --- docs/snippets/advanced-directive-array.xml | 20 +++--- .../advanced-directive-attributes.php | 6 +- .../advanced-directive-attributes.xml | 10 +-- docs/snippets/advanced-directive-cdata.xml | 8 +-- docs/snippets/advanced-directive-mixed.xml | 8 +-- docs/snippets/advanced-directive-value.xml | 8 +-- docs/snippets/advanced-element-attribute.php | 4 +- docs/snippets/advanced-element-attribute.xml | 8 +-- .../advanced-element-header-footer.php | 2 +- .../advanced-element-header-footer.xml | 4 +- .../advanced-element-info-before-false.php | 4 +- .../advanced-element-info-before-false.xml | 4 +- docs/snippets/advanced-element-info.php | 4 +- docs/snippets/advanced-element-info.xml | 4 +- docs/snippets/advanced-element-root.php | 2 +- docs/snippets/advanced-element-root.xml | 4 +- docs/snippets/receipt-instagram-feed.php | 2 +- docs/snippets/receipt-instagram-feed.xml | 4 +- docs/snippets/receipt-rss-feed.php | 2 +- docs/snippets/receipt-rss-feed.xml | 6 +- docs/snippets/receipt-sitemap-feed.php | 2 +- docs/snippets/receipt-sitemap-feed.xml | 4 +- docs/snippets/receipt-yandex-feed.php | 2 +- docs/snippets/receipt-yandex-feed.xml | 4 +- src/Services/ExportService.php | 66 ++++++++++++------- tests/Feature/Feeds/Split/MaxFilesTest.php | 2 +- tests/Helpers/expects.php | 4 +- tests/Pest.php | 2 + workbench/app/Feeds/EmptyFeed.php | 6 -- 29 files changed, 111 insertions(+), 95 deletions(-) diff --git a/docs/snippets/advanced-directive-array.xml b/docs/snippets/advanced-directive-array.xml index ed42be1..af36d30 100644 --- a/docs/snippets/advanced-directive-array.xml +++ b/docs/snippets/advanced-directive-array.xml @@ -2,18 +2,18 @@ - Cyril Kunze - https://via.placeholder.com/640x480.png/0044bb?text=sit - https://via.placeholder.com/640x480.png/0055ee?text=accusantium - https://via.placeholder.com/640x480.png/00dd22?text=qui - https://via.placeholder.com/640x480.png/0011dd?text=molestias + Mr. Madyson Corwin + https://via.placeholder.com/640x480.png/006688?text=culpa + https://via.placeholder.com/640x480.png/000011?text=doloribus + https://via.placeholder.com/640x480.png/00aaaa?text=id + https://via.placeholder.com/640x480.png/00bb22?text=reprehenderit - Norberto Cassin I - https://via.placeholder.com/640x480.png/006622?text=in - https://via.placeholder.com/640x480.png/009988?text=qui - https://via.placeholder.com/640x480.png/003300?text=ipsam - https://via.placeholder.com/640x480.png/00dd88?text=similique + Miss Delilah Ledner I + https://via.placeholder.com/640x480.png/00dd44?text=quia + https://via.placeholder.com/640x480.png/009900?text=aut + https://via.placeholder.com/640x480.png/004444?text=fugit + https://via.placeholder.com/640x480.png/001199?text=et diff --git a/docs/snippets/advanced-directive-attributes.php b/docs/snippets/advanced-directive-attributes.php index 7241a72..5dc9cd8 100644 --- a/docs/snippets/advanced-directive-attributes.php +++ b/docs/snippets/advanced-directive-attributes.php @@ -4,14 +4,14 @@ namespace App\Feeds; -use App\Feeds\Info\AttributesDirectiveFeedInfo; -use App\Feeds\Items\AttributesDirectiveFeedItem; -use App\Models\User; use DragonCode\LaravelFeed\Feeds\Feed; use DragonCode\LaravelFeed\Feeds\Info\FeedInfo; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; +use App\Feeds\Info\AttributesDirectiveFeedInfo; +use App\Feeds\Items\AttributesDirectiveFeedItem; +use App\Models\User; class AttributesDirectiveFeed extends Feed { diff --git a/docs/snippets/advanced-directive-attributes.xml b/docs/snippets/advanced-directive-attributes.xml index 6f8f833..eb68cfb 100644 --- a/docs/snippets/advanced-directive-attributes.xml +++ b/docs/snippets/advanced-directive-attributes.xml @@ -1,16 +1,16 @@ - + https://example.com - Ada Klocko - + Andy Gerhold + - Garrett Yost - + Mr. Raoul Haley + diff --git a/docs/snippets/advanced-directive-cdata.xml b/docs/snippets/advanced-directive-cdata.xml index 4aa67c2..1631d1a 100644 --- a/docs/snippets/advanced-directive-cdata.xml +++ b/docs/snippets/advanced-directive-cdata.xml @@ -2,12 +2,12 @@ - Thalia Baumbach]]> - fermin.crooks@example.com + Ila McKenzie PhD]]> + linnea.abernathy@example.com - Pauline Dicki]]> - bkuhic@example.org + Dr. Harmony Howe Sr.]]> + ydach@example.net diff --git a/docs/snippets/advanced-directive-mixed.xml b/docs/snippets/advanced-directive-mixed.xml index f50f87d..4d6dbb3 100644 --- a/docs/snippets/advanced-directive-mixed.xml +++ b/docs/snippets/advanced-directive-mixed.xml @@ -2,17 +2,17 @@ - Dewitt Brown + Lonny Keeling Foo - lakin.augusta@example.com + frunolfsdottir@example.com - Bessie DuBuque + Carmen Murphy Foo - ali52@example.org + diamond.christiansen@example.org diff --git a/docs/snippets/advanced-directive-value.xml b/docs/snippets/advanced-directive-value.xml index 8950115..70f30ab 100644 --- a/docs/snippets/advanced-directive-value.xml +++ b/docs/snippets/advanced-directive-value.xml @@ -2,12 +2,12 @@ - Johnson Schoen - hamill.myrtie@example.com + Zoey Farrell + abby44@example.com - Morton Abernathy - randall.corkery@example.com + Rozella Hamill + colt.pfannerstill@example.com diff --git a/docs/snippets/advanced-element-attribute.php b/docs/snippets/advanced-element-attribute.php index e1801d1..7cc726e 100644 --- a/docs/snippets/advanced-element-attribute.php +++ b/docs/snippets/advanced-element-attribute.php @@ -4,12 +4,12 @@ namespace App\Feeds; -use App\Feeds\Items\AttributeFeedItem; -use App\Models\User; use DragonCode\LaravelFeed\Feeds\Feed; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; +use App\Feeds\Items\AttributeFeedItem; +use App\Models\User; class AttributeFeed extends Feed { diff --git a/docs/snippets/advanced-element-attribute.xml b/docs/snippets/advanced-element-attribute.xml index 098d7a4..3825c22 100644 --- a/docs/snippets/advanced-element-attribute.xml +++ b/docs/snippets/advanced-element-attribute.xml @@ -1,13 +1,13 @@ - + 1 - Mrs. Janet Kuhn + Lempi Feil - + 2 - Kristin Gleason + Arnulfo Hudson diff --git a/docs/snippets/advanced-element-header-footer.php b/docs/snippets/advanced-element-header-footer.php index 019dd2a..9ab90bd 100644 --- a/docs/snippets/advanced-element-header-footer.php +++ b/docs/snippets/advanced-element-header-footer.php @@ -4,9 +4,9 @@ namespace App\Feeds; -use App\Models\User; use DragonCode\LaravelFeed\Feeds\Feed; use Illuminate\Database\Eloquent\Builder; +use App\Models\User; class HeaderFooterFeed extends Feed { diff --git a/docs/snippets/advanced-element-header-footer.xml b/docs/snippets/advanced-element-header-footer.xml index 8d2065a..1cca39c 100644 --- a/docs/snippets/advanced-element-header-footer.xml +++ b/docs/snippets/advanced-element-header-footer.xml @@ -3,11 +3,11 @@ 1 - Dr. Jordyn Hintz + Mr. Kareem O'Kon 2 - Garland Mraz IV + Hilbert Larson diff --git a/docs/snippets/advanced-element-info-before-false.php b/docs/snippets/advanced-element-info-before-false.php index 0f7aa35..a5fbc69 100644 --- a/docs/snippets/advanced-element-info-before-false.php +++ b/docs/snippets/advanced-element-info-before-false.php @@ -4,12 +4,12 @@ namespace App\Feeds; -use App\Feeds\Info\InfoMethodFeedInfo; -use App\Models\User; use DragonCode\LaravelFeed\Data\ElementData; use DragonCode\LaravelFeed\Feeds\Feed; use DragonCode\LaravelFeed\Feeds\Info\FeedInfo; use Illuminate\Database\Eloquent\Builder; +use App\Feeds\Info\InfoMethodFeedInfo; +use App\Models\User; class InfoMethodBeforeFalseTest extends Feed { diff --git a/docs/snippets/advanced-element-info-before-false.xml b/docs/snippets/advanced-element-info-before-false.xml index 11e53cb..d49839e 100644 --- a/docs/snippets/advanced-element-info-before-false.xml +++ b/docs/snippets/advanced-element-info-before-false.xml @@ -6,11 +6,11 @@ 1 - Willy Wilkinson + Ephraim Olson 2 - Delphine Mohr + Davion Heathcote diff --git a/docs/snippets/advanced-element-info.php b/docs/snippets/advanced-element-info.php index 0016c42..69238ad 100644 --- a/docs/snippets/advanced-element-info.php +++ b/docs/snippets/advanced-element-info.php @@ -4,11 +4,11 @@ namespace App\Feeds; -use App\Feeds\Info\InfoMethodFeedInfo; -use App\Models\User; use DragonCode\LaravelFeed\Feeds\Feed; use DragonCode\LaravelFeed\Feeds\Info\FeedInfo; use Illuminate\Database\Eloquent\Builder; +use App\Feeds\Info\InfoMethodFeedInfo; +use App\Models\User; class InfoMethodFeed extends Feed { diff --git a/docs/snippets/advanced-element-info.xml b/docs/snippets/advanced-element-info.xml index 4a9b800..f83c45b 100644 --- a/docs/snippets/advanced-element-info.xml +++ b/docs/snippets/advanced-element-info.xml @@ -6,11 +6,11 @@ 1 - Neha Pfannerstill V + Jacques Langosh I 2 - Quincy Walter + Loma Mueller diff --git a/docs/snippets/advanced-element-root.php b/docs/snippets/advanced-element-root.php index 4b0451d..cd65346 100644 --- a/docs/snippets/advanced-element-root.php +++ b/docs/snippets/advanced-element-root.php @@ -4,10 +4,10 @@ namespace App\Feeds; -use App\Models\User; use DragonCode\LaravelFeed\Data\ElementData; use DragonCode\LaravelFeed\Feeds\Feed; use Illuminate\Database\Eloquent\Builder; +use App\Models\User; use function now; diff --git a/docs/snippets/advanced-element-root.xml b/docs/snippets/advanced-element-root.xml index 780dfb6..b2dc7e4 100644 --- a/docs/snippets/advanced-element-root.xml +++ b/docs/snippets/advanced-element-root.xml @@ -3,11 +3,11 @@ 1 - Verna Goldner DVM + Rosemarie Blanda II 2 - Dr. Samara Ziemann II + Leopold Collins V diff --git a/docs/snippets/receipt-instagram-feed.php b/docs/snippets/receipt-instagram-feed.php index 1f08025..59a356a 100644 --- a/docs/snippets/receipt-instagram-feed.php +++ b/docs/snippets/receipt-instagram-feed.php @@ -4,11 +4,11 @@ namespace App\Feeds; -use App\Models\Product; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use DragonCode\LaravelFeed\Presets\InstagramFeedPreset; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; +use App\Models\Product; class InstagramFeed extends InstagramFeedPreset { diff --git a/docs/snippets/receipt-instagram-feed.xml b/docs/snippets/receipt-instagram-feed.xml index b8dfa84..a56fd2a 100644 --- a/docs/snippets/receipt-instagram-feed.xml +++ b/docs/snippets/receipt-instagram-feed.xml @@ -8,7 +8,7 @@ 1 - https://example.com/products/qui-ut-ratione-sed-et-ratione + https://example.com/products/et-nesciunt-non-exercitationem-enim-enim-praesentium https://via.placeholder.com/640x480.png/008877?text=repudiandae https://via.placeholder.com/640x480.png/008877?text=repudiandae The Best @@ -31,7 +31,7 @@ 2 - https://example.com/products/sunt-magnam-dolores-a-omnis + https://example.com/products/quod-voluptatem-molestiae-reiciendis-esse-quo-provident-vitae https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/000011?text=deleniti diff --git a/docs/snippets/receipt-rss-feed.php b/docs/snippets/receipt-rss-feed.php index 54aa89d..260feba 100644 --- a/docs/snippets/receipt-rss-feed.php +++ b/docs/snippets/receipt-rss-feed.php @@ -4,11 +4,11 @@ namespace App\Feeds; -use App\Models\News; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use DragonCode\LaravelFeed\Presets\RssFeedPreset; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; +use App\Models\News; class RssFeed extends RssFeedPreset { diff --git a/docs/snippets/receipt-rss-feed.xml b/docs/snippets/receipt-rss-feed.xml index 2f3e4e5..e43cc92 100644 --- a/docs/snippets/receipt-rss-feed.xml +++ b/docs/snippets/receipt-rss-feed.xml @@ -8,7 +8,7 @@ 1 Some category 1 - Wed, 03 Sep 2025 11:09:19 +0000 + Wed, 03 Sep 2025 10:57:39 +0000 bar @@ -17,7 +17,7 @@ 2 Some category 2 - Wed, 03 Sep 2025 22:21:20 +0000 + Wed, 03 Sep 2025 08:34:05 +0000 bar @@ -26,7 +26,7 @@ 3 Some category 3 - Wed, 03 Sep 2025 23:36:51 +0000 + Wed, 03 Sep 2025 14:43:48 +0000 bar diff --git a/docs/snippets/receipt-sitemap-feed.php b/docs/snippets/receipt-sitemap-feed.php index dd1bb63..c4b4726 100644 --- a/docs/snippets/receipt-sitemap-feed.php +++ b/docs/snippets/receipt-sitemap-feed.php @@ -4,11 +4,11 @@ namespace App\Feeds\Sitemaps; -use App\Models\Product; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use DragonCode\LaravelFeed\Presets\SitemapFeedPreset; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; +use App\Models\Product; class ProductFeed extends SitemapFeedPreset { diff --git a/docs/snippets/receipt-sitemap-feed.xml b/docs/snippets/receipt-sitemap-feed.xml index 491d3a4..aae00c5 100644 --- a/docs/snippets/receipt-sitemap-feed.xml +++ b/docs/snippets/receipt-sitemap-feed.xml @@ -2,12 +2,12 @@ - https://example.com/products/voluptatem-dolores-iure-sint-autem-dolores-quo-itaque + https://example.com/products/tenetur-dolores-suscipit-sit 2025-08-31T20:00:00+00:00 0.9 - https://example.com/products/veritatis-voluptates-officiis-aperiam-voluptas-vel-non + https://example.com/products/nihil-maiores-id-id 2025-08-30T19:00:00+00:00 0.9 diff --git a/docs/snippets/receipt-yandex-feed.php b/docs/snippets/receipt-yandex-feed.php index 29e32f2..88483b9 100644 --- a/docs/snippets/receipt-yandex-feed.php +++ b/docs/snippets/receipt-yandex-feed.php @@ -4,12 +4,12 @@ namespace App\Feeds; -use App\Models\Product; use DragonCode\LaravelFeed\Feeds\Info\FeedInfo; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use DragonCode\LaravelFeed\Presets\YandexFeedPreset; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; +use App\Models\Product; use function config; diff --git a/docs/snippets/receipt-yandex-feed.xml b/docs/snippets/receipt-yandex-feed.xml index d66edda..9410b58 100644 --- a/docs/snippets/receipt-yandex-feed.xml +++ b/docs/snippets/receipt-yandex-feed.xml @@ -18,7 +18,7 @@ - https://example.com/products/a-doloremque-et-nihil + https://example.com/products/explicabo-qui-dolorem-asperiores-vitae-numquam-dolores-ex GD-PRDCT-1 Some 1 Some description 1 @@ -29,7 +29,7 @@ bar - https://example.com/products/pariatur-molestiae-vitae-odit-qui + https://example.com/products/odit-distinctio-autem-ea-nisi GD-PRDCT-2 Some 2 Some description 2 diff --git a/src/Services/ExportService.php b/src/Services/ExportService.php index 670cb57..f549108 100644 --- a/src/Services/ExportService.php +++ b/src/Services/ExportService.php @@ -13,7 +13,6 @@ use function blank; use function implode; use function max; -use function min; use function value; class ExportService @@ -28,6 +27,8 @@ class ExportService protected int $total; + protected int $file; + protected Closure $createFile; protected Closure $closeFile; @@ -36,12 +37,9 @@ class ExportService protected ?ProgressBar $progressBar; + /** @var resource */ protected $resource; - protected int $file = 1; - - protected int $line = 0; - protected int $records = 0; protected array $content = []; @@ -54,6 +52,7 @@ public function __construct( $this->perFile = $this->perFile($this->feed); $this->maxFiles = $this->maxFiles($this->feed); $this->total = $this->total(); + $this->file = $this->fileIndex(); $this->progressBar = $this->createProgressBar( $this->total @@ -83,11 +82,27 @@ public function item(Closure $callback): static } public function export(): void + { + $this->total + ? $this->exportFilled() + : $this->exportEmpty(); + + $this->store(true); + + $this->progressBar?->finish(); + } + + protected function exportEmpty(): void { + //dd( + // 'aaa' + //); + } + + protected function exportFilled(): void { $this->feed->builder() ->lazyById($this->chunk) ->each(function (Model $model) { - $this->line++; $this->records++; $this->total--; @@ -103,32 +118,26 @@ public function export(): void return false; } }); - - $this->store(true); - - $this->progressBar?->finish(); } protected function store(bool $force = false): void { - if ($force || $this->records >= $this->perFile || $this->line >= $this->chunk) { - $this->line = 0; + if ($force || $this->records >= $this->perFile) { + $this->records = 0; $this->append(); $this->content = []; } - if ($force || $this->records >= $this->perFile) { - $this->records = 0; - + if ($force || $this->records >= $this->perFile || $this->total <= 0) { $this->releaseFile(); } } protected function isLastItem(): bool { - return $this->line >= min($this->perFile, $this->total); + return $this->records === $this->perFile || $this->total <= 0; } protected function getFile() // @pest-ignore-type @@ -146,9 +155,7 @@ protected function releaseFile(): void return; } - $index = $this->maxFiles ? $this->file : 0; - - value($this->closeFile, $this->resource, $index); + value($this->closeFile, $this->resource, $this->file); $this->resource = null; @@ -157,9 +164,9 @@ protected function releaseFile(): void protected function append(): void { - if (blank($this->content)) { - return; - } + //if (blank($this->content)) { + // return; + //} $this->filesystem->append($this->getFile(), implode(PHP_EOL, $this->content), $this->feed->path()); } @@ -180,13 +187,26 @@ protected function maxFiles(Feed $feed): int protected function total(): int { - if ($this->maxFiles <= 0) { + if ($this->maxFiles === 0) { return $this->modelCount(); } return $this->perFile * $this->maxFiles; } + protected function fileIndex(): int + { + if ($this->perFile === 0 || $this->perFile === $this->total) { + return 0; + } + + if ($this->perFile >= $this->total) { + return 0; + } + + return 1; + } + protected function modelCount(): int { return $this->modelCount ??= $this->feed->builder()->count(); diff --git a/tests/Feature/Feeds/Split/MaxFilesTest.php b/tests/Feature/Feeds/Split/MaxFilesTest.php index 6a26f24..6abcf28 100644 --- a/tests/Feature/Feeds/Split/MaxFilesTest.php +++ b/tests/Feature/Feeds/Split/MaxFilesTest.php @@ -8,5 +8,5 @@ test('export', function () { createNews(...NewsFakeData::toArray()); - expectFeedSnapshot(SplitMaxFilesFeed::class, indexes: [1]); + expectFeedSnapshot(SplitMaxFilesFeed::class); }); diff --git a/tests/Helpers/expects.php b/tests/Helpers/expects.php index e742729..8f00fac 100644 --- a/tests/Helpers/expects.php +++ b/tests/Helpers/expects.php @@ -22,6 +22,8 @@ function expectFeedSnapshot(string $class, FeedFormatEnum $format = FeedFormatEn $content = file_get_contents($instance->path($index)); + expect($content)->toMatchSnapshot(); + match ($format) { FeedFormatEnum::Json => expect($content)->toBeJson(), FeedFormatEnum::JsonLines => expect($content)->toBeJsonLines(), @@ -29,7 +31,5 @@ function expectFeedSnapshot(string $class, FeedFormatEnum $format = FeedFormatEn FeedFormatEnum::Rss => expect($content)->toBeRss(), default => null }; - - expect($content)->toMatchSnapshot(); } } diff --git a/tests/Pest.php b/tests/Pest.php index f4b9875..80ead72 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -23,6 +23,8 @@ deleteMigrations(); }) ->afterEach(function () { + expect('end of snapshots')->toMatchSnapshot(); + deleteOperations(); deleteMigrations(); }); diff --git a/workbench/app/Feeds/EmptyFeed.php b/workbench/app/Feeds/EmptyFeed.php index f3b7d3b..1621f48 100644 --- a/workbench/app/Feeds/EmptyFeed.php +++ b/workbench/app/Feeds/EmptyFeed.php @@ -4,7 +4,6 @@ namespace Workbench\App\Feeds; -use DragonCode\LaravelFeed\Data\ElementData; use DragonCode\LaravelFeed\Feeds\Feed; use Illuminate\Database\Eloquent\Builder; use Workbench\App\Models\News; @@ -20,9 +19,4 @@ public function header(): string { return ''; } - - public function root(): ElementData - { - return new ElementData; - } } From 4495634ebf755a2499a5e2f56c0f1dcfcf90dd56 Mon Sep 17 00:00:00 2001 From: Andrey Helldar Date: Sat, 1 Nov 2025 01:18:40 +0300 Subject: [PATCH 4/8] Deleted unused XML snippet files in the `docs/snippets` directory --- docs/snippets/advanced-directive-array-1.xml | 19 ------ docs/snippets/advanced-directive-array.xml | 20 +++---- .../advanced-directive-attributes-1.xml | 16 ----- .../advanced-directive-attributes.xml | 10 ++-- docs/snippets/advanced-directive-cdata-1.xml | 13 ---- docs/snippets/advanced-directive-cdata.xml | 8 +-- docs/snippets/advanced-directive-mixed-1.xml | 19 ------ docs/snippets/advanced-directive-mixed.xml | 8 +-- docs/snippets/advanced-directive-value-1.xml | 13 ---- docs/snippets/advanced-directive-value.xml | 8 +-- .../snippets/advanced-element-attribute-1.xml | 13 ---- docs/snippets/advanced-element-attribute.xml | 8 +-- .../advanced-element-header-footer-1.xml | 15 ----- .../advanced-element-header-footer.xml | 4 +- docs/snippets/advanced-element-info-1.xml | 16 ----- .../advanced-element-info-before-false-1.xml | 16 ----- .../advanced-element-info-before-false.xml | 4 +- docs/snippets/advanced-element-info.xml | 4 +- docs/snippets/advanced-element-root-1.xml | 13 ---- docs/snippets/advanced-element-root.xml | 4 +- docs/snippets/receipt-instagram-feed-1.xml | 59 ------------------- docs/snippets/receipt-instagram-feed.xml | 4 +- docs/snippets/receipt-rss-feed-1.xml | 34 ----------- docs/snippets/receipt-rss-feed.xml | 6 +- docs/snippets/receipt-sitemap-feed-1.xml | 15 ----- docs/snippets/receipt-sitemap-feed.xml | 4 +- docs/snippets/receipt-yandex-feed-1.xml | 47 --------------- docs/snippets/receipt-yandex-feed.xml | 4 +- 28 files changed, 48 insertions(+), 356 deletions(-) delete mode 100644 docs/snippets/advanced-directive-array-1.xml delete mode 100644 docs/snippets/advanced-directive-attributes-1.xml delete mode 100644 docs/snippets/advanced-directive-cdata-1.xml delete mode 100644 docs/snippets/advanced-directive-mixed-1.xml delete mode 100644 docs/snippets/advanced-directive-value-1.xml delete mode 100644 docs/snippets/advanced-element-attribute-1.xml delete mode 100644 docs/snippets/advanced-element-header-footer-1.xml delete mode 100644 docs/snippets/advanced-element-info-1.xml delete mode 100644 docs/snippets/advanced-element-info-before-false-1.xml delete mode 100644 docs/snippets/advanced-element-root-1.xml delete mode 100644 docs/snippets/receipt-instagram-feed-1.xml delete mode 100644 docs/snippets/receipt-rss-feed-1.xml delete mode 100644 docs/snippets/receipt-sitemap-feed-1.xml delete mode 100644 docs/snippets/receipt-yandex-feed-1.xml diff --git a/docs/snippets/advanced-directive-array-1.xml b/docs/snippets/advanced-directive-array-1.xml deleted file mode 100644 index b250e82..0000000 --- a/docs/snippets/advanced-directive-array-1.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Cedrick Stoltenberg - https://via.placeholder.com/640x480.png/006611?text=sapiente - https://via.placeholder.com/640x480.png/0099aa?text=voluptates - https://via.placeholder.com/640x480.png/008833?text=facere - https://via.placeholder.com/640x480.png/005500?text=illo - - - Cale Murazik - https://via.placeholder.com/640x480.png/00bb22?text=nisi - https://via.placeholder.com/640x480.png/0022aa?text=illo - https://via.placeholder.com/640x480.png/0066ee?text=omnis - https://via.placeholder.com/640x480.png/0099bb?text=maxime - - - diff --git a/docs/snippets/advanced-directive-array.xml b/docs/snippets/advanced-directive-array.xml index af36d30..7d77ab5 100644 --- a/docs/snippets/advanced-directive-array.xml +++ b/docs/snippets/advanced-directive-array.xml @@ -2,18 +2,18 @@ - Mr. Madyson Corwin - https://via.placeholder.com/640x480.png/006688?text=culpa - https://via.placeholder.com/640x480.png/000011?text=doloribus - https://via.placeholder.com/640x480.png/00aaaa?text=id - https://via.placeholder.com/640x480.png/00bb22?text=reprehenderit + Ms. Retta Greenfelder + https://via.placeholder.com/640x480.png/003366?text=eveniet + https://via.placeholder.com/640x480.png/00ddee?text=quis + https://via.placeholder.com/640x480.png/00ffaa?text=ut + https://via.placeholder.com/640x480.png/000088?text=officia - Miss Delilah Ledner I - https://via.placeholder.com/640x480.png/00dd44?text=quia - https://via.placeholder.com/640x480.png/009900?text=aut - https://via.placeholder.com/640x480.png/004444?text=fugit - https://via.placeholder.com/640x480.png/001199?text=et + Modesto Bins + https://via.placeholder.com/640x480.png/00ffee?text=aut + https://via.placeholder.com/640x480.png/00bbdd?text=sint + https://via.placeholder.com/640x480.png/004433?text=et + https://via.placeholder.com/640x480.png/007755?text=non diff --git a/docs/snippets/advanced-directive-attributes-1.xml b/docs/snippets/advanced-directive-attributes-1.xml deleted file mode 100644 index 9854d56..0000000 --- a/docs/snippets/advanced-directive-attributes-1.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - -https://example.com - - - Mr. Cameron Nader - - - - Prof. Ernestine Murphy MD - - - - diff --git a/docs/snippets/advanced-directive-attributes.xml b/docs/snippets/advanced-directive-attributes.xml index eb68cfb..3cfec1c 100644 --- a/docs/snippets/advanced-directive-attributes.xml +++ b/docs/snippets/advanced-directive-attributes.xml @@ -1,16 +1,16 @@ - + https://example.com - Andy Gerhold - + Bettie Welch + - Mr. Raoul Haley - + Mr. Nicola Shields II + diff --git a/docs/snippets/advanced-directive-cdata-1.xml b/docs/snippets/advanced-directive-cdata-1.xml deleted file mode 100644 index 9b52be0..0000000 --- a/docs/snippets/advanced-directive-cdata-1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - Oral Lang]]> - margie.bartell@example.net - - - Prof. Kellen Schroeder DDS]]> - awindler@example.net - - - diff --git a/docs/snippets/advanced-directive-cdata.xml b/docs/snippets/advanced-directive-cdata.xml index 1631d1a..4a5206e 100644 --- a/docs/snippets/advanced-directive-cdata.xml +++ b/docs/snippets/advanced-directive-cdata.xml @@ -2,12 +2,12 @@ - Ila McKenzie PhD]]> - linnea.abernathy@example.com + Ms. Enola Stoltenberg]]> + iblock@example.com - Dr. Harmony Howe Sr.]]> - ydach@example.net + Euna Wuckert]]> + ray21@example.com diff --git a/docs/snippets/advanced-directive-mixed-1.xml b/docs/snippets/advanced-directive-mixed-1.xml deleted file mode 100644 index 9e466c0..0000000 --- a/docs/snippets/advanced-directive-mixed-1.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Rod Mraz III - - Foo - winona.fay@example.com - - - - Chelsey Wintheiser - - Foo - else71@example.com - - - - diff --git a/docs/snippets/advanced-directive-mixed.xml b/docs/snippets/advanced-directive-mixed.xml index 4d6dbb3..941e081 100644 --- a/docs/snippets/advanced-directive-mixed.xml +++ b/docs/snippets/advanced-directive-mixed.xml @@ -2,17 +2,17 @@ - Lonny Keeling + Jenifer Jast Foo - frunolfsdottir@example.com + dewitt.ratke@example.com - Carmen Murphy + Bernadette Ebert Foo - diamond.christiansen@example.org + murphy.elda@example.org diff --git a/docs/snippets/advanced-directive-value-1.xml b/docs/snippets/advanced-directive-value-1.xml deleted file mode 100644 index 272cd5c..0000000 --- a/docs/snippets/advanced-directive-value-1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - Onie Hahn - mozelle.eichmann@example.com - - - Heaven Hauck - grady.rocky@example.org - - - diff --git a/docs/snippets/advanced-directive-value.xml b/docs/snippets/advanced-directive-value.xml index 70f30ab..dbbf9bc 100644 --- a/docs/snippets/advanced-directive-value.xml +++ b/docs/snippets/advanced-directive-value.xml @@ -2,12 +2,12 @@ - Zoey Farrell - abby44@example.com + Israel Hettinger + edaniel@example.org - Rozella Hamill - colt.pfannerstill@example.com + Prof. Mitchel Jacobi + walsh.hobart@example.org diff --git a/docs/snippets/advanced-element-attribute-1.xml b/docs/snippets/advanced-element-attribute-1.xml deleted file mode 100644 index 953531a..0000000 --- a/docs/snippets/advanced-element-attribute-1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - 1 - Elody Durgan - - - 2 - Cierra Bauch - - - diff --git a/docs/snippets/advanced-element-attribute.xml b/docs/snippets/advanced-element-attribute.xml index 3825c22..d435a07 100644 --- a/docs/snippets/advanced-element-attribute.xml +++ b/docs/snippets/advanced-element-attribute.xml @@ -1,13 +1,13 @@ - + 1 - Lempi Feil + Molly Lueilwitz - + 2 - Arnulfo Hudson + Catherine Conroy diff --git a/docs/snippets/advanced-element-header-footer-1.xml b/docs/snippets/advanced-element-header-footer-1.xml deleted file mode 100644 index d48e863..0000000 --- a/docs/snippets/advanced-element-header-footer-1.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - 1 - Paxton Bradtke - - - 2 - Riley Grant III - - - - -This is a custom footer element \ No newline at end of file diff --git a/docs/snippets/advanced-element-header-footer.xml b/docs/snippets/advanced-element-header-footer.xml index 1cca39c..5e74445 100644 --- a/docs/snippets/advanced-element-header-footer.xml +++ b/docs/snippets/advanced-element-header-footer.xml @@ -3,11 +3,11 @@ 1 - Mr. Kareem O'Kon + Dr. Antonio Will 2 - Hilbert Larson + Kristy Littel diff --git a/docs/snippets/advanced-element-info-1.xml b/docs/snippets/advanced-element-info-1.xml deleted file mode 100644 index bb7e763..0000000 --- a/docs/snippets/advanced-element-info-1.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - -Laravel -https://example.com - - - 1 - Mr. Odell Keeling MD - - - 2 - Cesar Swaniawski - - - diff --git a/docs/snippets/advanced-element-info-before-false-1.xml b/docs/snippets/advanced-element-info-before-false-1.xml deleted file mode 100644 index 4270321..0000000 --- a/docs/snippets/advanced-element-info-before-false-1.xml +++ /dev/null @@ -1,16 +0,0 @@ - -Laravel -https://example.com - - - - - 1 - Mr. Grayce Borer IV - - - 2 - Melissa Windler PhD - - - diff --git a/docs/snippets/advanced-element-info-before-false.xml b/docs/snippets/advanced-element-info-before-false.xml index d49839e..9df1c90 100644 --- a/docs/snippets/advanced-element-info-before-false.xml +++ b/docs/snippets/advanced-element-info-before-false.xml @@ -6,11 +6,11 @@ 1 - Ephraim Olson + Prof. Ignatius Funk PhD 2 - Davion Heathcote + Mrs. Burdette Lueilwitz diff --git a/docs/snippets/advanced-element-info.xml b/docs/snippets/advanced-element-info.xml index f83c45b..b7cffd9 100644 --- a/docs/snippets/advanced-element-info.xml +++ b/docs/snippets/advanced-element-info.xml @@ -6,11 +6,11 @@ 1 - Jacques Langosh I + Donald Lindgren 2 - Loma Mueller + Mrs. Ilene Zulauf IV diff --git a/docs/snippets/advanced-element-root-1.xml b/docs/snippets/advanced-element-root-1.xml deleted file mode 100644 index 17d5472..0000000 --- a/docs/snippets/advanced-element-root-1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - 1 - Trenton Larson - - - 2 - Xzavier Spinka Jr. - - - diff --git a/docs/snippets/advanced-element-root.xml b/docs/snippets/advanced-element-root.xml index b2dc7e4..0f44248 100644 --- a/docs/snippets/advanced-element-root.xml +++ b/docs/snippets/advanced-element-root.xml @@ -3,11 +3,11 @@ 1 - Rosemarie Blanda II + Erwin Zemlak II 2 - Leopold Collins V + Queenie Stokes diff --git a/docs/snippets/receipt-instagram-feed-1.xml b/docs/snippets/receipt-instagram-feed-1.xml deleted file mode 100644 index cea1bd6..0000000 --- a/docs/snippets/receipt-instagram-feed-1.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - Laravel - https://example.com - - - - 1 - - - https://example.com/products/in-illum-dolores-officiis-ea - https://via.placeholder.com/640x480.png/008877?text=repudiandae - https://via.placeholder.com/640x480.png/008877?text=repudiandae - The Best - new - in stock - 100 - 100 - 12345 - active - 123 - 456 - Some foo - Some bar - Some baz - a - b - c - - - 2 - - - https://example.com/products/ut-adipisci-consectetur-non-et - https://via.placeholder.com/640x480.png/009966?text=beatae - https://via.placeholder.com/640x480.png/009966?text=beatae - https://via.placeholder.com/640x480.png/000011?text=deleniti - https://via.placeholder.com/640x480.png/009999?text=voluptates - The Best - new - in stock - 250 - 250 - 12345 - active - 123 - 456 - Some foo - Some bar - Some baz - a - b - c - - - - - - \ No newline at end of file diff --git a/docs/snippets/receipt-instagram-feed.xml b/docs/snippets/receipt-instagram-feed.xml index a56fd2a..93a437b 100644 --- a/docs/snippets/receipt-instagram-feed.xml +++ b/docs/snippets/receipt-instagram-feed.xml @@ -8,7 +8,7 @@ 1 - https://example.com/products/et-nesciunt-non-exercitationem-enim-enim-praesentium + https://example.com/products/illum-repellendus-nostrum-nostrum-molestias-est https://via.placeholder.com/640x480.png/008877?text=repudiandae https://via.placeholder.com/640x480.png/008877?text=repudiandae The Best @@ -31,7 +31,7 @@ 2 - https://example.com/products/quod-voluptatem-molestiae-reiciendis-esse-quo-provident-vitae + https://example.com/products/ratione-rerum-velit-vel-et-est-pariatur https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/000011?text=deleniti diff --git a/docs/snippets/receipt-rss-feed-1.xml b/docs/snippets/receipt-rss-feed-1.xml deleted file mode 100644 index 8836509..0000000 --- a/docs/snippets/receipt-rss-feed-1.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - Some 1 - https://example.com/news/some-1 - 1 - - Some category 1 - Wed, 03 Sep 2025 18:52:32 +0000 - bar - - - Some 2 - https://example.com/news/some-2 - 2 - - Some category 2 - Wed, 03 Sep 2025 13:19:41 +0000 - bar - - - Some 3 - https://example.com/news/some-3 - 3 - - Some category 3 - Thu, 04 Sep 2025 03:28:15 +0000 - bar - - - - \ No newline at end of file diff --git a/docs/snippets/receipt-rss-feed.xml b/docs/snippets/receipt-rss-feed.xml index e43cc92..8a79509 100644 --- a/docs/snippets/receipt-rss-feed.xml +++ b/docs/snippets/receipt-rss-feed.xml @@ -8,7 +8,7 @@ 1 Some category 1 - Wed, 03 Sep 2025 10:57:39 +0000 + Thu, 04 Sep 2025 03:28:18 +0000 bar @@ -17,7 +17,7 @@ 2 Some category 2 - Wed, 03 Sep 2025 08:34:05 +0000 + Wed, 03 Sep 2025 21:25:59 +0000 bar @@ -26,7 +26,7 @@ 3 Some category 3 - Wed, 03 Sep 2025 14:43:48 +0000 + Thu, 04 Sep 2025 01:40:48 +0000 bar diff --git a/docs/snippets/receipt-sitemap-feed-1.xml b/docs/snippets/receipt-sitemap-feed-1.xml deleted file mode 100644 index 62a4bee..0000000 --- a/docs/snippets/receipt-sitemap-feed-1.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - https://example.com/products/reiciendis-animi-ut-voluptatem-quaerat-odit-suscipit - 2025-08-31T20:00:00+00:00 - 0.9 - - - https://example.com/products/consequatur-beatae-non-sint-totam-voluptatem - 2025-08-30T19:00:00+00:00 - 0.9 - - - diff --git a/docs/snippets/receipt-sitemap-feed.xml b/docs/snippets/receipt-sitemap-feed.xml index aae00c5..27d7f93 100644 --- a/docs/snippets/receipt-sitemap-feed.xml +++ b/docs/snippets/receipt-sitemap-feed.xml @@ -2,12 +2,12 @@ - https://example.com/products/tenetur-dolores-suscipit-sit + https://example.com/products/ut-et-id-distinctio-tempora-adipisci 2025-08-31T20:00:00+00:00 0.9 - https://example.com/products/nihil-maiores-id-id + https://example.com/products/ducimus-error-totam-eum-consectetur 2025-08-30T19:00:00+00:00 0.9 diff --git a/docs/snippets/receipt-yandex-feed-1.xml b/docs/snippets/receipt-yandex-feed-1.xml deleted file mode 100644 index f3db52c..0000000 --- a/docs/snippets/receipt-yandex-feed-1.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - -My App -My Company -My Platform -https://example.com -feeds@example.com - - - - - Foo - Bar - -bar - - - - - https://example.com/products/qui-sunt-nihil-placeat-numquam-rerum-laboriosam-dolores-aliquid - GD-PRDCT-1 - Some 1 - Some description 1 - 100 - RUR - The Best - https://via.placeholder.com/640x480.png/008877?text=repudiandae - bar - - - https://example.com/products/laudantium-perferendis-error-ad-explicabo-eos-aspernatur - GD-PRDCT-2 - Some 2 - Some description 2 - 250 - RUR - The Best - https://via.placeholder.com/640x480.png/009966?text=beatae - https://via.placeholder.com/640x480.png/000011?text=deleniti - https://via.placeholder.com/640x480.png/009999?text=voluptates - bar - - - - - \ No newline at end of file diff --git a/docs/snippets/receipt-yandex-feed.xml b/docs/snippets/receipt-yandex-feed.xml index 9410b58..20f58cc 100644 --- a/docs/snippets/receipt-yandex-feed.xml +++ b/docs/snippets/receipt-yandex-feed.xml @@ -18,7 +18,7 @@ - https://example.com/products/explicabo-qui-dolorem-asperiores-vitae-numquam-dolores-ex + https://example.com/products/eligendi-iste-mollitia-vel GD-PRDCT-1 Some 1 Some description 1 @@ -29,7 +29,7 @@ bar - https://example.com/products/odit-distinctio-autem-ea-nisi + https://example.com/products/reiciendis-et-saepe-nemo-ea-voluptatibus GD-PRDCT-2 Some 2 Some description 2 From 0aeec1dc3626ed7fa268e64df7e4d108ee9b0e78 Mon Sep 17 00:00:00 2001 From: Andrey Helldar Date: Sat, 1 Nov 2025 01:40:28 +0300 Subject: [PATCH 5/8] Refactored `ExportService` and updated feed snapshots and test files --- docs/snippets/advanced-directive-array-1.xml | 6 ++ docs/snippets/advanced-directive-array.xml | 20 +++--- .../advanced-directive-attributes-1.xml | 9 +++ .../advanced-directive-attributes.xml | 10 +-- docs/snippets/advanced-directive-cdata-1.xml | 6 ++ docs/snippets/advanced-directive-cdata.xml | 8 +-- docs/snippets/advanced-directive-mixed-1.xml | 6 ++ docs/snippets/advanced-directive-mixed.xml | 8 +-- docs/snippets/advanced-directive-value-1.xml | 6 ++ docs/snippets/advanced-directive-value.xml | 8 +-- .../snippets/advanced-element-attribute-1.xml | 6 ++ docs/snippets/advanced-element-attribute.xml | 8 +-- .../advanced-element-header-footer-1.xml | 8 +++ .../advanced-element-header-footer.xml | 4 +- docs/snippets/advanced-element-info-1.xml | 9 +++ .../advanced-element-info-before-false-1.xml | 9 +++ .../advanced-element-info-before-false.xml | 4 +- docs/snippets/advanced-element-info.xml | 4 +- docs/snippets/advanced-element-root-1.xml | 6 ++ docs/snippets/advanced-element-root.xml | 4 +- docs/snippets/receipt-instagram-feed-1.xml | 12 ++++ docs/snippets/receipt-instagram-feed.xml | 4 +- docs/snippets/receipt-rss-feed-1.xml | 8 +++ docs/snippets/receipt-rss-feed.xml | 6 +- docs/snippets/receipt-sitemap-feed-1.xml | 6 ++ docs/snippets/receipt-sitemap-feed.xml | 4 +- docs/snippets/receipt-yandex-feed-1.xml | 24 +++++++ docs/snippets/receipt-yandex-feed.xml | 4 +- src/Services/ExportService.php | 48 ++++++------- .../Generation/DefaultTest/generate.snap | 1 + .../Generation/DisabledTest/generate.snap | 1 + ..._and_removes__draft_during_generation.snap | 1 + ...D_with_data_set__dataset__latest_id__.snap | 1 + ...D_with_data_set__dataset__oldest_id__.snap | 1 + .../incorrect_with_data_set________.snap | 1 + .../incorrect_with_data_set_________.snap | 1 + .../incorrect_with_data_set__________2.snap | 1 + .../incorrect_with_data_set__________3.snap | 1 + .../incorrect_with_data_set__________4.snap | 1 + ...incorrect_with_data_set____foo_bar___.snap | 1 + .../Generation/NotFoundTest/not_found.snap | 1 + .../enabled_with_data_set___false__.snap | 1 + .../enabled_with_data_set___true__.snap | 1 + .../Generation/SpecifiedTest/generate.snap | 1 + .../Console/Schedule/RegisterTest/cron.snap | 1 + ...stub_with_data_set__dataset___array__.snap | 1 + ...with_data_set__dataset___attributes__.snap | 1 + ...stub_with_data_set__dataset___cdata__.snap | 1 + ...stub_with_data_set__dataset___mixed__.snap | 1 + ...stub_with_data_set__dataset___value__.snap | 1 + ..._with_data_set__dataset__attributes__.snap | 1 + ..._data_set__dataset__header___footer__.snap | 1 + ...amples_with_data_set__dataset__info__.snap | 1 + ...ata_set__dataset__info_before_false__.snap | 1 + ...amples_with_data_set__dataset__root__.snap | 1 + ...b_with_data_set__dataset__instagram__.snap | 1 + ...te_stub_with_data_set__dataset__rss__.snap | 1 + ...tub_with_data_set__dataset__sitemap__.snap | 1 + ...stub_with_data_set__dataset__yandex__.snap | 1 + .../Feature/Events/FailedTest/failed.snap | 1 + .../Events/FailedTest/feed_class_link.snap | 1 + ...nished_events_for_each_generated_feed.snap | 1 + .../export_with_data_set___false__.snap | 5 ++ .../export_with_data_set___false____2.snap | 1 + .../export_with_data_set___true__.snap | 5 ++ .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + .../export_with_data_set___false__.snap | 5 ++ .../export_with_data_set___false____2.snap | 1 + .../export_with_data_set___true__.snap | 26 +++++++ .../export_with_data_set___true____2.snap | 1 + .../export_with_data_set___false__.snap | 6 ++ .../export_with_data_set___false____2.snap | 1 + .../export_with_data_set___true__.snap | 65 ++++++++++++++++++ .../export_with_data_set___true____2.snap | 1 + .../export_with_data_set___false__.snap | 8 +++ .../export_with_data_set___false____2.snap | 1 + .../export_with_data_set___true__.snap | 67 +++++++++++++++++++ .../export_with_data_set___true____2.snap | 1 + .../export_with_data_set___false__.snap | 7 ++ .../export_with_data_set___false____2.snap | 1 + .../export_with_data_set___true__.snap | 28 ++++++++ .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + ...ap => export_with_data_set___false__.snap} | 0 .../export_with_data_set___false____2.snap | 1 + ...nap => export_with_data_set___true__.snap} | 0 .../export_with_data_set___true____2.snap | 1 + .../Feeds/Split/CsvTest/export__3.snap | 1 + .../Feeds/Split/JsonLinesTest/export__3.snap | 1 + .../Feeds/Split/JsonTest/export__3.snap | 1 + .../Feeds/Split/MaxFilesTest/export.snap | 3 +- .../Feeds/Split/MaxFilesTest/export__2.snap | 1 + .../Feeds/Split/PerFileTest/export__3.snap | 1 + .../Feeds/Split/RssTest/export__3.snap | 1 + .../Feeds/Split/XmlTest/export__3.snap | 1 + .../not_a_class_with_data_set____123___.snap | 1 + ...not_a_class_with_data_set____________.snap | 1 + ...class_with_data_set__________________.snap | 1 + ...a_class_with_data_set____foo_1_2_3___.snap | 1 + .../not_a_class_with_data_set____foo___.snap | 1 + .../Create/ExpressionTest/not_a_class.snap | 1 + .../Create/ExpressionTest/not_extending.snap | 1 + .../Queries/Create/SuccessTest/creating.snap | 1 + ...t_deletes_a_feed_and_sets_deleted__at.snap | 1 + .../Delete/UnknownIdentifierTest/failed.snap | 1 + ...s_a_soft_deleted_feed_to_active_state.snap | 1 + ...when_restoring_a_non_existent_feed_ID.snap | 1 + ..._with_data_set__dataset__EmptyFeed__.snap} | 0 ...e_with_data_set__dataset__FullFeed__.snap} | 0 ...ith_data_set__dataset__PartialFeed__.snap} | 0 ...ith_data_set__dataset__SitemapFeed__.snap} | 0 ...with_data_set__dataset__YandexFeed__.snap} | 0 workbench/app/Feeds/FullFeed.php | 3 +- 168 files changed, 507 insertions(+), 78 deletions(-) create mode 100644 docs/snippets/advanced-directive-array-1.xml create mode 100644 docs/snippets/advanced-directive-attributes-1.xml create mode 100644 docs/snippets/advanced-directive-cdata-1.xml create mode 100644 docs/snippets/advanced-directive-mixed-1.xml create mode 100644 docs/snippets/advanced-directive-value-1.xml create mode 100644 docs/snippets/advanced-element-attribute-1.xml create mode 100644 docs/snippets/advanced-element-header-footer-1.xml create mode 100644 docs/snippets/advanced-element-info-1.xml create mode 100644 docs/snippets/advanced-element-info-before-false-1.xml create mode 100644 docs/snippets/advanced-element-root-1.xml create mode 100644 docs/snippets/receipt-instagram-feed-1.xml create mode 100644 docs/snippets/receipt-rss-feed-1.xml create mode 100644 docs/snippets/receipt-sitemap-feed-1.xml create mode 100644 docs/snippets/receipt-yandex-feed-1.xml create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/DefaultTest/generate.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/DisabledTest/generate.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/EnsureDeleteTest/overwrites_existing_feed_file_and_removes__draft_during_generation.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/FoundTest/generates_only_the_selected_feed_by_ID_with_data_set__dataset__latest_id__.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/FoundTest/generates_only_the_selected_feed_by_ID_with_data_set__dataset__oldest_id__.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set________.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set_________.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________2.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________3.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________4.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set____foo_bar___.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/NotFoundTest/not_found.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/ProgressBarTest/enabled_with_data_set___false__.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/ProgressBarTest/enabled_with_data_set___true__.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Generation/SpecifiedTest/generate.snap create mode 100644 tests/.pest/snapshots/Feature/Console/Schedule/RegisterTest/cron.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___array__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___attributes__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___cdata__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___mixed__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___value__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__attributes__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__header___footer__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__info__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__info_before_false__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__root__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__instagram__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__rss__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__sitemap__.snap create mode 100644 tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__yandex__.snap create mode 100644 tests/.pest/snapshots/Feature/Events/FailedTest/failed.snap create mode 100644 tests/.pest/snapshots/Feature/Events/FailedTest/feed_class_link.snap create mode 100644 tests/.pest/snapshots/Feature/Events/SuccessTest/dispatches_FeedStarting_and_FeedFinished_events_for_each_generated_feed.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___false__.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___false____2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___true__.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___true____2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___false__.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___false____2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___true__.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___true____2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___false__.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___false____2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___true__.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___true____2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___false__.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___false____2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___true__.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___true____2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___false__.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___false____2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___true__.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___true____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/{export_with_data_set____false__.snap => export_with_data_set___false__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___false____2.snap rename tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/{export_with_data_set____true__.snap => export_with_data_set___true__.snap} (100%) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___true____2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export__3.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/JsonLinesTest/export__3.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/JsonTest/export__3.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export__2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export__3.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export__3.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export__3.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____123___.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____________.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set__________________.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____foo_1_2_3___.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____foo___.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Create/ExpressionTest/not_a_class.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Create/ExpressionTest/not_extending.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Create/SuccessTest/creating.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Delete/SuccessTest/soft_deletes_a_feed_and_sets_deleted__at.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Delete/UnknownIdentifierTest/failed.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Restore/SuccessTest/restores_a_soft_deleted_feed_to_active_state.snap create mode 100644 tests/.pest/snapshots/Feature/Queries/Restore/UnknownIdentifierTest/does_nothing_when_restoring_a_non_existent_feed_ID.snap rename tests/.pest/snapshots/Unit/Feeds/FilenameTest/{filename_with_data_set___dataset__EmptyFeed__.snap => filename_with_data_set__dataset__EmptyFeed__.snap} (100%) rename tests/.pest/snapshots/Unit/Feeds/FilenameTest/{filename_with_data_set___dataset__FullFeed__.snap => filename_with_data_set__dataset__FullFeed__.snap} (100%) rename tests/.pest/snapshots/Unit/Feeds/FilenameTest/{filename_with_data_set___dataset__PartialFeed__.snap => filename_with_data_set__dataset__PartialFeed__.snap} (100%) rename tests/.pest/snapshots/Unit/Feeds/FilenameTest/{filename_with_data_set___dataset__SitemapFeed__.snap => filename_with_data_set__dataset__SitemapFeed__.snap} (100%) rename tests/.pest/snapshots/Unit/Feeds/FilenameTest/{filename_with_data_set___dataset__YandexFeed__.snap => filename_with_data_set__dataset__YandexFeed__.snap} (100%) diff --git a/docs/snippets/advanced-directive-array-1.xml b/docs/snippets/advanced-directive-array-1.xml new file mode 100644 index 0000000..64ff3a9 --- /dev/null +++ b/docs/snippets/advanced-directive-array-1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/snippets/advanced-directive-array.xml b/docs/snippets/advanced-directive-array.xml index 7d77ab5..f8a05f4 100644 --- a/docs/snippets/advanced-directive-array.xml +++ b/docs/snippets/advanced-directive-array.xml @@ -2,18 +2,18 @@ - Ms. Retta Greenfelder - https://via.placeholder.com/640x480.png/003366?text=eveniet - https://via.placeholder.com/640x480.png/00ddee?text=quis - https://via.placeholder.com/640x480.png/00ffaa?text=ut - https://via.placeholder.com/640x480.png/000088?text=officia + Kadin Becker + https://via.placeholder.com/640x480.png/007788?text=minima + https://via.placeholder.com/640x480.png/0011dd?text=sunt + https://via.placeholder.com/640x480.png/00bbaa?text=enim + https://via.placeholder.com/640x480.png/00bb00?text=quaerat - Modesto Bins - https://via.placeholder.com/640x480.png/00ffee?text=aut - https://via.placeholder.com/640x480.png/00bbdd?text=sint - https://via.placeholder.com/640x480.png/004433?text=et - https://via.placeholder.com/640x480.png/007755?text=non + Dr. Jewel Osinski DVM + https://via.placeholder.com/640x480.png/00aa22?text=nam + https://via.placeholder.com/640x480.png/0055dd?text=iure + https://via.placeholder.com/640x480.png/008833?text=temporibus + https://via.placeholder.com/640x480.png/00bb11?text=sunt diff --git a/docs/snippets/advanced-directive-attributes-1.xml b/docs/snippets/advanced-directive-attributes-1.xml new file mode 100644 index 0000000..5d29660 --- /dev/null +++ b/docs/snippets/advanced-directive-attributes-1.xml @@ -0,0 +1,9 @@ + + + + +https://example.com + + + + diff --git a/docs/snippets/advanced-directive-attributes.xml b/docs/snippets/advanced-directive-attributes.xml index 3cfec1c..8145196 100644 --- a/docs/snippets/advanced-directive-attributes.xml +++ b/docs/snippets/advanced-directive-attributes.xml @@ -1,16 +1,16 @@ - + https://example.com - Bettie Welch - + Prof. Mallie Morissette Jr. + - Mr. Nicola Shields II - + Dr. Leola Stanton + diff --git a/docs/snippets/advanced-directive-cdata-1.xml b/docs/snippets/advanced-directive-cdata-1.xml new file mode 100644 index 0000000..6ceb920 --- /dev/null +++ b/docs/snippets/advanced-directive-cdata-1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/snippets/advanced-directive-cdata.xml b/docs/snippets/advanced-directive-cdata.xml index 4a5206e..37b3ff4 100644 --- a/docs/snippets/advanced-directive-cdata.xml +++ b/docs/snippets/advanced-directive-cdata.xml @@ -2,12 +2,12 @@ - Ms. Enola Stoltenberg]]> - iblock@example.com + Dr. Samir Muller Sr.]]> + king.carleton@example.org - Euna Wuckert]]> - ray21@example.com + Damian Wiegand II]]> + emiliano.douglas@example.net diff --git a/docs/snippets/advanced-directive-mixed-1.xml b/docs/snippets/advanced-directive-mixed-1.xml new file mode 100644 index 0000000..166e46d --- /dev/null +++ b/docs/snippets/advanced-directive-mixed-1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/snippets/advanced-directive-mixed.xml b/docs/snippets/advanced-directive-mixed.xml index 941e081..cb432fe 100644 --- a/docs/snippets/advanced-directive-mixed.xml +++ b/docs/snippets/advanced-directive-mixed.xml @@ -2,17 +2,17 @@ - Jenifer Jast + Marlen Fay Foo - dewitt.ratke@example.com + kaitlin00@example.org - Bernadette Ebert + Mavis Rosenbaum Foo - murphy.elda@example.org + ryley89@example.com diff --git a/docs/snippets/advanced-directive-value-1.xml b/docs/snippets/advanced-directive-value-1.xml new file mode 100644 index 0000000..649df25 --- /dev/null +++ b/docs/snippets/advanced-directive-value-1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/snippets/advanced-directive-value.xml b/docs/snippets/advanced-directive-value.xml index dbbf9bc..29be5ad 100644 --- a/docs/snippets/advanced-directive-value.xml +++ b/docs/snippets/advanced-directive-value.xml @@ -2,12 +2,12 @@ - Israel Hettinger - edaniel@example.org + Zakary Schmeler + bernadine63@example.org - Prof. Mitchel Jacobi - walsh.hobart@example.org + Mariam Zulauf + apfeffer@example.com diff --git a/docs/snippets/advanced-element-attribute-1.xml b/docs/snippets/advanced-element-attribute-1.xml new file mode 100644 index 0000000..57f5c27 --- /dev/null +++ b/docs/snippets/advanced-element-attribute-1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/snippets/advanced-element-attribute.xml b/docs/snippets/advanced-element-attribute.xml index d435a07..86edaf1 100644 --- a/docs/snippets/advanced-element-attribute.xml +++ b/docs/snippets/advanced-element-attribute.xml @@ -1,13 +1,13 @@ - + 1 - Molly Lueilwitz + Dr. Granville Conroy - + 2 - Catherine Conroy + Delilah Kshlerin diff --git a/docs/snippets/advanced-element-header-footer-1.xml b/docs/snippets/advanced-element-header-footer-1.xml new file mode 100644 index 0000000..66b94dd --- /dev/null +++ b/docs/snippets/advanced-element-header-footer-1.xml @@ -0,0 +1,8 @@ + + + + + + + +This is a custom footer element \ No newline at end of file diff --git a/docs/snippets/advanced-element-header-footer.xml b/docs/snippets/advanced-element-header-footer.xml index 5e74445..b104806 100644 --- a/docs/snippets/advanced-element-header-footer.xml +++ b/docs/snippets/advanced-element-header-footer.xml @@ -3,11 +3,11 @@ 1 - Dr. Antonio Will + Sonya Morissette 2 - Kristy Littel + Jennifer O'Kon diff --git a/docs/snippets/advanced-element-info-1.xml b/docs/snippets/advanced-element-info-1.xml new file mode 100644 index 0000000..b25c1fc --- /dev/null +++ b/docs/snippets/advanced-element-info-1.xml @@ -0,0 +1,9 @@ + + + +Laravel +https://example.com + + + + diff --git a/docs/snippets/advanced-element-info-before-false-1.xml b/docs/snippets/advanced-element-info-before-false-1.xml new file mode 100644 index 0000000..aa41e9d --- /dev/null +++ b/docs/snippets/advanced-element-info-before-false-1.xml @@ -0,0 +1,9 @@ + +Laravel +https://example.com + + + + + + diff --git a/docs/snippets/advanced-element-info-before-false.xml b/docs/snippets/advanced-element-info-before-false.xml index 9df1c90..f22bac4 100644 --- a/docs/snippets/advanced-element-info-before-false.xml +++ b/docs/snippets/advanced-element-info-before-false.xml @@ -6,11 +6,11 @@ 1 - Prof. Ignatius Funk PhD + Elisabeth Fritsch 2 - Mrs. Burdette Lueilwitz + Emmet Farrell diff --git a/docs/snippets/advanced-element-info.xml b/docs/snippets/advanced-element-info.xml index b7cffd9..cd88cbb 100644 --- a/docs/snippets/advanced-element-info.xml +++ b/docs/snippets/advanced-element-info.xml @@ -6,11 +6,11 @@ 1 - Donald Lindgren + Kali Hoeger 2 - Mrs. Ilene Zulauf IV + Keith Gerlach diff --git a/docs/snippets/advanced-element-root-1.xml b/docs/snippets/advanced-element-root-1.xml new file mode 100644 index 0000000..dc56005 --- /dev/null +++ b/docs/snippets/advanced-element-root-1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/snippets/advanced-element-root.xml b/docs/snippets/advanced-element-root.xml index 0f44248..f4f2ba6 100644 --- a/docs/snippets/advanced-element-root.xml +++ b/docs/snippets/advanced-element-root.xml @@ -3,11 +3,11 @@ 1 - Erwin Zemlak II + Pearline Lemke 2 - Queenie Stokes + Elena Mueller diff --git a/docs/snippets/receipt-instagram-feed-1.xml b/docs/snippets/receipt-instagram-feed-1.xml new file mode 100644 index 0000000..aea4e74 --- /dev/null +++ b/docs/snippets/receipt-instagram-feed-1.xml @@ -0,0 +1,12 @@ + + + Laravel + https://example.com + + + + + + + + \ No newline at end of file diff --git a/docs/snippets/receipt-instagram-feed.xml b/docs/snippets/receipt-instagram-feed.xml index 93a437b..5ef0d30 100644 --- a/docs/snippets/receipt-instagram-feed.xml +++ b/docs/snippets/receipt-instagram-feed.xml @@ -8,7 +8,7 @@ 1 - https://example.com/products/illum-repellendus-nostrum-nostrum-molestias-est + https://example.com/products/adipisci-sint-animi-tempore-laboriosam https://via.placeholder.com/640x480.png/008877?text=repudiandae https://via.placeholder.com/640x480.png/008877?text=repudiandae The Best @@ -31,7 +31,7 @@ 2 - https://example.com/products/ratione-rerum-velit-vel-et-est-pariatur + https://example.com/products/beatae-rem-reiciendis-commodi-voluptas-enim-atque https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/000011?text=deleniti diff --git a/docs/snippets/receipt-rss-feed-1.xml b/docs/snippets/receipt-rss-feed-1.xml new file mode 100644 index 0000000..cac8c48 --- /dev/null +++ b/docs/snippets/receipt-rss-feed-1.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/docs/snippets/receipt-rss-feed.xml b/docs/snippets/receipt-rss-feed.xml index 8a79509..796239f 100644 --- a/docs/snippets/receipt-rss-feed.xml +++ b/docs/snippets/receipt-rss-feed.xml @@ -8,7 +8,7 @@ 1 Some category 1 - Thu, 04 Sep 2025 03:28:18 +0000 + Wed, 03 Sep 2025 09:00:51 +0000 bar @@ -17,7 +17,7 @@ 2 Some category 2 - Wed, 03 Sep 2025 21:25:59 +0000 + Wed, 03 Sep 2025 21:01:28 +0000 bar @@ -26,7 +26,7 @@ 3 Some category 3 - Thu, 04 Sep 2025 01:40:48 +0000 + Wed, 03 Sep 2025 07:49:16 +0000 bar diff --git a/docs/snippets/receipt-sitemap-feed-1.xml b/docs/snippets/receipt-sitemap-feed-1.xml new file mode 100644 index 0000000..d817fca --- /dev/null +++ b/docs/snippets/receipt-sitemap-feed-1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/snippets/receipt-sitemap-feed.xml b/docs/snippets/receipt-sitemap-feed.xml index 27d7f93..6e89adb 100644 --- a/docs/snippets/receipt-sitemap-feed.xml +++ b/docs/snippets/receipt-sitemap-feed.xml @@ -2,12 +2,12 @@ - https://example.com/products/ut-et-id-distinctio-tempora-adipisci + https://example.com/products/neque-vel-maiores-sit-amet-natus-voluptatem-dolorem 2025-08-31T20:00:00+00:00 0.9 - https://example.com/products/ducimus-error-totam-eum-consectetur + https://example.com/products/facere-facilis-assumenda-non-rerum-id-aut 2025-08-30T19:00:00+00:00 0.9 diff --git a/docs/snippets/receipt-yandex-feed-1.xml b/docs/snippets/receipt-yandex-feed-1.xml new file mode 100644 index 0000000..d0abb44 --- /dev/null +++ b/docs/snippets/receipt-yandex-feed-1.xml @@ -0,0 +1,24 @@ + + + +My App +My Company +My Platform +https://example.com +feeds@example.com + + + + + Foo + Bar + +bar + + + + + + + + \ No newline at end of file diff --git a/docs/snippets/receipt-yandex-feed.xml b/docs/snippets/receipt-yandex-feed.xml index 20f58cc..250be88 100644 --- a/docs/snippets/receipt-yandex-feed.xml +++ b/docs/snippets/receipt-yandex-feed.xml @@ -18,7 +18,7 @@ - https://example.com/products/eligendi-iste-mollitia-vel + https://example.com/products/nemo-omnis-neque-enim-libero-aut-quis GD-PRDCT-1 Some 1 Some description 1 @@ -29,7 +29,7 @@ bar - https://example.com/products/reiciendis-et-saepe-nemo-ea-voluptatibus + https://example.com/products/ratione-voluptates-sunt-quia-animi-debitis-nobis GD-PRDCT-2 Some 2 Some description 2 diff --git a/src/Services/ExportService.php b/src/Services/ExportService.php index f549108..250bf55 100644 --- a/src/Services/ExportService.php +++ b/src/Services/ExportService.php @@ -10,7 +10,6 @@ use Illuminate\Database\Eloquent\Model; use Symfony\Component\Console\Helper\ProgressBar; -use function blank; use function implode; use function max; use function value; @@ -42,6 +41,8 @@ class ExportService protected int $records = 0; + protected int $left; + protected array $content = []; public function __construct( @@ -54,6 +55,8 @@ public function __construct( $this->total = $this->total(); $this->file = $this->fileIndex(); + $this->left = $this->total; + $this->progressBar = $this->createProgressBar( $this->total ); @@ -82,35 +85,18 @@ public function item(Closure $callback): static } public function export(): void - { - $this->total - ? $this->exportFilled() - : $this->exportEmpty(); - - $this->store(true); - - $this->progressBar?->finish(); - } - - protected function exportEmpty(): void { - //dd( - // 'aaa' - //); - } - - protected function exportFilled(): void { $this->feed->builder() ->lazyById($this->chunk) ->each(function (Model $model) { $this->records++; - $this->total--; + $this->left--; $this->content[] = value($this->item, $model, $this->isLastItem()); $this->store(); - if ($this->total <= 0) { + if ($this->left <= 0) { return false; } @@ -118,11 +104,23 @@ protected function exportFilled(): void return false; } }); + + $this->store(true); + + $this->progressBar?->finish(); } protected function store(bool $force = false): void { - if ($force || $this->records >= $this->perFile) { + $whenRecords = $this->records >= $this->perFile; + $whenLeft = $this->total && $this->left <= 0; + $whenFile = $this->file > 1 && ! $this->content; + + if (! $force && $whenFile) { + return; + } + + if ($force || $whenRecords || $whenLeft) { $this->records = 0; $this->append(); @@ -130,14 +128,14 @@ protected function store(bool $force = false): void $this->content = []; } - if ($force || $this->records >= $this->perFile || $this->total <= 0) { + if ($force || $whenRecords) { $this->releaseFile(); } } protected function isLastItem(): bool { - return $this->records === $this->perFile || $this->total <= 0; + return $this->records === $this->perFile || $this->left <= 0; } protected function getFile() // @pest-ignore-type @@ -164,10 +162,6 @@ protected function releaseFile(): void protected function append(): void { - //if (blank($this->content)) { - // return; - //} - $this->filesystem->append($this->getFile(), implode(PHP_EOL, $this->content), $this->feed->path()); } diff --git a/tests/.pest/snapshots/Feature/Console/Generation/DefaultTest/generate.snap b/tests/.pest/snapshots/Feature/Console/Generation/DefaultTest/generate.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/DefaultTest/generate.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/DisabledTest/generate.snap b/tests/.pest/snapshots/Feature/Console/Generation/DisabledTest/generate.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/DisabledTest/generate.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/EnsureDeleteTest/overwrites_existing_feed_file_and_removes__draft_during_generation.snap b/tests/.pest/snapshots/Feature/Console/Generation/EnsureDeleteTest/overwrites_existing_feed_file_and_removes__draft_during_generation.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/EnsureDeleteTest/overwrites_existing_feed_file_and_removes__draft_during_generation.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/FoundTest/generates_only_the_selected_feed_by_ID_with_data_set__dataset__latest_id__.snap b/tests/.pest/snapshots/Feature/Console/Generation/FoundTest/generates_only_the_selected_feed_by_ID_with_data_set__dataset__latest_id__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/FoundTest/generates_only_the_selected_feed_by_ID_with_data_set__dataset__latest_id__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/FoundTest/generates_only_the_selected_feed_by_ID_with_data_set__dataset__oldest_id__.snap b/tests/.pest/snapshots/Feature/Console/Generation/FoundTest/generates_only_the_selected_feed_by_ID_with_data_set__dataset__oldest_id__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/FoundTest/generates_only_the_selected_feed_by_ID_with_data_set__dataset__oldest_id__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set________.snap b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set________.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set________.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set_________.snap b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set_________.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set_________.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________2.snap b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________3.snap b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________3.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________3.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________4.snap b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________4.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set__________4.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set____foo_bar___.snap b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set____foo_bar___.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/IncorrectParameterTest/incorrect_with_data_set____foo_bar___.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/NotFoundTest/not_found.snap b/tests/.pest/snapshots/Feature/Console/Generation/NotFoundTest/not_found.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/NotFoundTest/not_found.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/ProgressBarTest/enabled_with_data_set___false__.snap b/tests/.pest/snapshots/Feature/Console/Generation/ProgressBarTest/enabled_with_data_set___false__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/ProgressBarTest/enabled_with_data_set___false__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/ProgressBarTest/enabled_with_data_set___true__.snap b/tests/.pest/snapshots/Feature/Console/Generation/ProgressBarTest/enabled_with_data_set___true__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/ProgressBarTest/enabled_with_data_set___true__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Generation/SpecifiedTest/generate.snap b/tests/.pest/snapshots/Feature/Console/Generation/SpecifiedTest/generate.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Generation/SpecifiedTest/generate.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Console/Schedule/RegisterTest/cron.snap b/tests/.pest/snapshots/Feature/Console/Schedule/RegisterTest/cron.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Console/Schedule/RegisterTest/cron.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___array__.snap b/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___array__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___array__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___attributes__.snap b/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___attributes__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___attributes__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___cdata__.snap b/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___cdata__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___cdata__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___mixed__.snap b/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___mixed__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___mixed__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___value__.snap b/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___value__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/DirectiveTest/it_generate_stub_with_data_set__dataset___value__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__attributes__.snap b/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__attributes__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__attributes__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__header___footer__.snap b/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__header___footer__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__header___footer__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__info__.snap b/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__info__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__info__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__info_before_false__.snap b/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__info_before_false__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__info_before_false__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__root__.snap b/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__root__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/ElementTest/it_generates_documentation_stubs_for_feed_examples_with_data_set__dataset__root__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__instagram__.snap b/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__instagram__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__instagram__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__rss__.snap b/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__rss__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__rss__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__sitemap__.snap b/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__sitemap__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__sitemap__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__yandex__.snap b/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__yandex__.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Docs/ReceiptTest/it_generate_stub_with_data_set__dataset__yandex__.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Events/FailedTest/failed.snap b/tests/.pest/snapshots/Feature/Events/FailedTest/failed.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Events/FailedTest/failed.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Events/FailedTest/feed_class_link.snap b/tests/.pest/snapshots/Feature/Events/FailedTest/feed_class_link.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Events/FailedTest/feed_class_link.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Events/SuccessTest/dispatches_FeedStarting_and_FeedFinished_events_for_each_generated_feed.snap b/tests/.pest/snapshots/Feature/Events/SuccessTest/dispatches_FeedStarting_and_FeedFinished_events_for_each_generated_feed.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Events/SuccessTest/dispatches_FeedStarting_and_FeedFinished_events_for_each_generated_feed.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___false__.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___false__.snap new file mode 100644 index 0000000..4a5bb93 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___false__.snap @@ -0,0 +1,5 @@ + + + + + diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___true__.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___true__.snap new file mode 100644 index 0000000..4a5bb93 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___true__.snap @@ -0,0 +1,5 @@ + + + + + diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Defaults/EmptyTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Defaults/FullTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Defaults/ModelTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Defaults/PartialTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/DefaultTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/InfoTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootInfoTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Csv/RootTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___false__.snap new file mode 100644 index 0000000..e2ca44d --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___false__.snap @@ -0,0 +1,5 @@ +[ +{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, +{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, +{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} +] diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___true__.snap new file mode 100644 index 0000000..8e62410 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___true__.snap @@ -0,0 +1,26 @@ +[ +{ + "id": 1, + "title": "Some 1", + "content": "Some content 1", + "category": "Some category 1", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +}, +{ + "id": 2, + "title": "Some 2", + "content": "Some content 2", + "category": "Some category 2", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +}, +{ + "id": 3, + "title": "Some 3", + "content": "Some content 3", + "category": "Some category 3", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +} +] diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/DefaultTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___false__.snap new file mode 100644 index 0000000..0194d9c --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___false__.snap @@ -0,0 +1,6 @@ +[ +{"name":"Laravel","company":"Laravel","platform":"Laravel","url":"https://example.com","email":"test@example.com","currencies":{"@currency":[{"@attributes":{"id":"RUR","rate":"1"}}]},"categories":{"@category":[{"@attributes":{"id":41},"@value":"Домашние майки"},{"@attributes":{"id":539},"@value":"Велосипедки"},{"@attributes":{"id":44},"@value":"Ремни"}]}}, +{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, +{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, +{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} +] diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___true__.snap new file mode 100644 index 0000000..f7359a7 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___true__.snap @@ -0,0 +1,65 @@ +[ +{ + "name": "Laravel", + "company": "Laravel", + "platform": "Laravel", + "url": "https://example.com", + "email": "test@example.com", + "currencies": { + "@currency": [ + { + "@attributes": { + "id": "RUR", + "rate": "1" + } + } + ] + }, + "categories": { + "@category": [ + { + "@attributes": { + "id": 41 + }, + "@value": "Домашние майки" + }, + { + "@attributes": { + "id": 539 + }, + "@value": "Велосипедки" + }, + { + "@attributes": { + "id": 44 + }, + "@value": "Ремни" + } + ] + } +}, +{ + "id": 1, + "title": "Some 1", + "content": "Some content 1", + "category": "Some category 1", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +}, +{ + "id": 2, + "title": "Some 2", + "content": "Some content 2", + "category": "Some category 2", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +}, +{ + "id": 3, + "title": "Some 3", + "content": "Some content 3", + "category": "Some category 3", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +} +] diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/InfoTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___false__.snap new file mode 100644 index 0000000..37f763e --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___false__.snap @@ -0,0 +1,8 @@ +{ +"name":"Laravel","company":"Laravel","platform":"Laravel","url":"https://example.com","email":"test@example.com","currencies":{"@currency":[{"@attributes":{"id":"RUR","rate":"1"}}]},"categories":{"@category":[{"@attributes":{"id":41},"@value":"Домашние майки"},{"@attributes":{"id":539},"@value":"Велосипедки"},{"@attributes":{"id":44},"@value":"Ремни"}]}, +"items": [ +{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, +{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, +{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} +] +} diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___true__.snap new file mode 100644 index 0000000..6beb376 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___true__.snap @@ -0,0 +1,67 @@ +{ + + "name": "Laravel", + "company": "Laravel", + "platform": "Laravel", + "url": "https://example.com", + "email": "test@example.com", + "currencies": { + "@currency": [ + { + "@attributes": { + "id": "RUR", + "rate": "1" + } + } + ] + }, + "categories": { + "@category": [ + { + "@attributes": { + "id": 41 + }, + "@value": "Домашние майки" + }, + { + "@attributes": { + "id": 539 + }, + "@value": "Велосипедки" + }, + { + "@attributes": { + "id": 44 + }, + "@value": "Ремни" + } + ] + } +, +"items": [ +{ + "id": 1, + "title": "Some 1", + "content": "Some content 1", + "category": "Some category 1", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +}, +{ + "id": 2, + "title": "Some 2", + "content": "Some content 2", + "category": "Some category 2", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +}, +{ + "id": 3, + "title": "Some 3", + "content": "Some content 3", + "category": "Some category 3", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +} +] +} diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootInfoTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___false__.snap new file mode 100644 index 0000000..1a8e82e --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___false__.snap @@ -0,0 +1,7 @@ +{ +"items": [ +{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, +{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"}, +{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} +] +} diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___true__.snap new file mode 100644 index 0000000..77e1f56 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___true__.snap @@ -0,0 +1,28 @@ +{ +"items": [ +{ + "id": 1, + "title": "Some 1", + "content": "Some content 1", + "category": "Some category 1", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +}, +{ + "id": 2, + "title": "Some 2", + "content": "Some content 2", + "category": "Some category 2", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +}, +{ + "id": 3, + "title": "Some 3", + "content": "Some content 3", + "category": "Some category 3", + "created_at": "2025-09-04T04:08:12.000000Z", + "updated_at": "2025-09-04T04:08:12.000000Z" +} +] +} diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Json/RootTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/DefaultTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/InfoTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootInfoTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/JsonLines/RootTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/DefaultTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/InfoTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootInfoTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set____false__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___false__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set____false__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___false__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___false____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___false____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___false____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set____true__.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___true__.snap similarity index 100% rename from tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set____true__.snap rename to tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___true__.snap diff --git a/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___true____2.snap b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___true____2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Formats/Rss/RootTest/export_with_data_set___true____2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export__3.snap b/tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export__3.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/CsvTest/export__3.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/JsonLinesTest/export__3.snap b/tests/.pest/snapshots/Feature/Feeds/Split/JsonLinesTest/export__3.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/JsonLinesTest/export__3.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/JsonTest/export__3.snap b/tests/.pest/snapshots/Feature/Feeds/Split/JsonTest/export__3.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/JsonTest/export__3.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export.snap b/tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export.snap index e5706ae..0385f70 100644 --- a/tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export.snap +++ b/tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export.snap @@ -1 +1,2 @@ -{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} \ No newline at end of file +{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} +{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export__2.snap b/tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export__2.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/MaxFilesTest/export__2.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export__3.snap b/tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export__3.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/PerFileTest/export__3.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export__3.snap b/tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export__3.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/RssTest/export__3.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export__3.snap b/tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export__3.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/XmlTest/export__3.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____123___.snap b/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____123___.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____123___.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____________.snap b/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____________.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____________.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set__________________.snap b/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set__________________.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set__________________.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____foo_1_2_3___.snap b/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____foo_1_2_3___.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____foo_1_2_3___.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____foo___.snap b/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____foo___.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Create/ClassTest/not_a_class_with_data_set____foo___.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Create/ExpressionTest/not_a_class.snap b/tests/.pest/snapshots/Feature/Queries/Create/ExpressionTest/not_a_class.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Create/ExpressionTest/not_a_class.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Create/ExpressionTest/not_extending.snap b/tests/.pest/snapshots/Feature/Queries/Create/ExpressionTest/not_extending.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Create/ExpressionTest/not_extending.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Create/SuccessTest/creating.snap b/tests/.pest/snapshots/Feature/Queries/Create/SuccessTest/creating.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Create/SuccessTest/creating.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Delete/SuccessTest/soft_deletes_a_feed_and_sets_deleted__at.snap b/tests/.pest/snapshots/Feature/Queries/Delete/SuccessTest/soft_deletes_a_feed_and_sets_deleted__at.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Delete/SuccessTest/soft_deletes_a_feed_and_sets_deleted__at.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Delete/UnknownIdentifierTest/failed.snap b/tests/.pest/snapshots/Feature/Queries/Delete/UnknownIdentifierTest/failed.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Delete/UnknownIdentifierTest/failed.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Restore/SuccessTest/restores_a_soft_deleted_feed_to_active_state.snap b/tests/.pest/snapshots/Feature/Queries/Restore/SuccessTest/restores_a_soft_deleted_feed_to_active_state.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Restore/SuccessTest/restores_a_soft_deleted_feed_to_active_state.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Queries/Restore/UnknownIdentifierTest/does_nothing_when_restoring_a_non_existent_feed_ID.snap b/tests/.pest/snapshots/Feature/Queries/Restore/UnknownIdentifierTest/does_nothing_when_restoring_a_non_existent_feed_ID.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Queries/Restore/UnknownIdentifierTest/does_nothing_when_restoring_a_non_existent_feed_ID.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set___dataset__EmptyFeed__.snap b/tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set__dataset__EmptyFeed__.snap similarity index 100% rename from tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set___dataset__EmptyFeed__.snap rename to tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set__dataset__EmptyFeed__.snap diff --git a/tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set___dataset__FullFeed__.snap b/tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set__dataset__FullFeed__.snap similarity index 100% rename from tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set___dataset__FullFeed__.snap rename to tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set__dataset__FullFeed__.snap diff --git a/tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set___dataset__PartialFeed__.snap b/tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set__dataset__PartialFeed__.snap similarity index 100% rename from tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set___dataset__PartialFeed__.snap rename to tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set__dataset__PartialFeed__.snap diff --git a/tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set___dataset__SitemapFeed__.snap b/tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set__dataset__SitemapFeed__.snap similarity index 100% rename from tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set___dataset__SitemapFeed__.snap rename to tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set__dataset__SitemapFeed__.snap diff --git a/tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set___dataset__YandexFeed__.snap b/tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set__dataset__YandexFeed__.snap similarity index 100% rename from tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set___dataset__YandexFeed__.snap rename to tests/.pest/snapshots/Unit/Feeds/FilenameTest/filename_with_data_set__dataset__YandexFeed__.snap diff --git a/workbench/app/Feeds/FullFeed.php b/workbench/app/Feeds/FullFeed.php index d821b71..387fb08 100644 --- a/workbench/app/Feeds/FullFeed.php +++ b/workbench/app/Feeds/FullFeed.php @@ -13,13 +13,12 @@ use Workbench\App\Models\News; use function class_basename; -use function now; class FullFeed extends Feed { public function builder(): Builder { - return News::query()->where('updated_at', '>', now()->subDay()); + return News::query(); } public function root(): ElementData From ee154e4566208bb6a375aebeebfc932716b576e9 Mon Sep 17 00:00:00 2001 From: Andrey Helldar Date: Sat, 1 Nov 2025 01:45:59 +0300 Subject: [PATCH 6/8] Deleted unused and outdated XML snippet files and updated feed snapshots --- docs/snippets/advanced-directive-array-1.xml | 6 ----- docs/snippets/advanced-directive-array.xml | 20 ++++++++-------- .../advanced-directive-attributes-1.xml | 9 ------- .../advanced-directive-attributes.xml | 10 ++++---- docs/snippets/advanced-directive-cdata-1.xml | 6 ----- docs/snippets/advanced-directive-cdata.xml | 8 +++---- docs/snippets/advanced-directive-mixed-1.xml | 6 ----- docs/snippets/advanced-directive-mixed.xml | 8 +++---- docs/snippets/advanced-directive-value-1.xml | 6 ----- docs/snippets/advanced-directive-value.xml | 8 +++---- .../snippets/advanced-element-attribute-1.xml | 6 ----- docs/snippets/advanced-element-attribute.xml | 8 +++---- .../advanced-element-header-footer-1.xml | 8 ------- .../advanced-element-header-footer.xml | 4 ++-- docs/snippets/advanced-element-info-1.xml | 9 ------- .../advanced-element-info-before-false-1.xml | 9 ------- .../advanced-element-info-before-false.xml | 4 ++-- docs/snippets/advanced-element-info.xml | 4 ++-- docs/snippets/advanced-element-root-1.xml | 6 ----- docs/snippets/advanced-element-root.xml | 4 ++-- docs/snippets/receipt-instagram-feed-1.xml | 12 ---------- docs/snippets/receipt-instagram-feed.xml | 4 ++-- docs/snippets/receipt-rss-feed-1.xml | 8 ------- docs/snippets/receipt-rss-feed.xml | 6 ++--- docs/snippets/receipt-sitemap-feed-1.xml | 6 ----- docs/snippets/receipt-sitemap-feed.xml | 4 ++-- docs/snippets/receipt-yandex-feed-1.xml | 24 ------------------- docs/snippets/receipt-yandex-feed.xml | 4 ++-- 28 files changed, 48 insertions(+), 169 deletions(-) delete mode 100644 docs/snippets/advanced-directive-array-1.xml delete mode 100644 docs/snippets/advanced-directive-attributes-1.xml delete mode 100644 docs/snippets/advanced-directive-cdata-1.xml delete mode 100644 docs/snippets/advanced-directive-mixed-1.xml delete mode 100644 docs/snippets/advanced-directive-value-1.xml delete mode 100644 docs/snippets/advanced-element-attribute-1.xml delete mode 100644 docs/snippets/advanced-element-header-footer-1.xml delete mode 100644 docs/snippets/advanced-element-info-1.xml delete mode 100644 docs/snippets/advanced-element-info-before-false-1.xml delete mode 100644 docs/snippets/advanced-element-root-1.xml delete mode 100644 docs/snippets/receipt-instagram-feed-1.xml delete mode 100644 docs/snippets/receipt-rss-feed-1.xml delete mode 100644 docs/snippets/receipt-sitemap-feed-1.xml delete mode 100644 docs/snippets/receipt-yandex-feed-1.xml diff --git a/docs/snippets/advanced-directive-array-1.xml b/docs/snippets/advanced-directive-array-1.xml deleted file mode 100644 index 64ff3a9..0000000 --- a/docs/snippets/advanced-directive-array-1.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/snippets/advanced-directive-array.xml b/docs/snippets/advanced-directive-array.xml index f8a05f4..2024099 100644 --- a/docs/snippets/advanced-directive-array.xml +++ b/docs/snippets/advanced-directive-array.xml @@ -2,18 +2,18 @@ - Kadin Becker - https://via.placeholder.com/640x480.png/007788?text=minima - https://via.placeholder.com/640x480.png/0011dd?text=sunt - https://via.placeholder.com/640x480.png/00bbaa?text=enim - https://via.placeholder.com/640x480.png/00bb00?text=quaerat + Andreanne Koepp + https://via.placeholder.com/640x480.png/0055bb?text=eligendi + https://via.placeholder.com/640x480.png/0044ff?text=velit + https://via.placeholder.com/640x480.png/00dd00?text=impedit + https://via.placeholder.com/640x480.png/00dd66?text=consequatur - Dr. Jewel Osinski DVM - https://via.placeholder.com/640x480.png/00aa22?text=nam - https://via.placeholder.com/640x480.png/0055dd?text=iure - https://via.placeholder.com/640x480.png/008833?text=temporibus - https://via.placeholder.com/640x480.png/00bb11?text=sunt + Dameon Mueller + https://via.placeholder.com/640x480.png/000000?text=eos + https://via.placeholder.com/640x480.png/00bb33?text=eum + https://via.placeholder.com/640x480.png/0055ee?text=hic + https://via.placeholder.com/640x480.png/00eeaa?text=molestiae diff --git a/docs/snippets/advanced-directive-attributes-1.xml b/docs/snippets/advanced-directive-attributes-1.xml deleted file mode 100644 index 5d29660..0000000 --- a/docs/snippets/advanced-directive-attributes-1.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - -https://example.com - - - - diff --git a/docs/snippets/advanced-directive-attributes.xml b/docs/snippets/advanced-directive-attributes.xml index 8145196..e7a004b 100644 --- a/docs/snippets/advanced-directive-attributes.xml +++ b/docs/snippets/advanced-directive-attributes.xml @@ -1,16 +1,16 @@ - + https://example.com - Prof. Mallie Morissette Jr. - + Kennith Frami + - Dr. Leola Stanton - + Pansy Carroll + diff --git a/docs/snippets/advanced-directive-cdata-1.xml b/docs/snippets/advanced-directive-cdata-1.xml deleted file mode 100644 index 6ceb920..0000000 --- a/docs/snippets/advanced-directive-cdata-1.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/snippets/advanced-directive-cdata.xml b/docs/snippets/advanced-directive-cdata.xml index 37b3ff4..3a3db46 100644 --- a/docs/snippets/advanced-directive-cdata.xml +++ b/docs/snippets/advanced-directive-cdata.xml @@ -2,12 +2,12 @@ - Dr. Samir Muller Sr.]]> - king.carleton@example.org + Fay Grant]]> + kub.shanon@example.com - Damian Wiegand II]]> - emiliano.douglas@example.net + Sydney Littel]]> + jordi34@example.com diff --git a/docs/snippets/advanced-directive-mixed-1.xml b/docs/snippets/advanced-directive-mixed-1.xml deleted file mode 100644 index 166e46d..0000000 --- a/docs/snippets/advanced-directive-mixed-1.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/snippets/advanced-directive-mixed.xml b/docs/snippets/advanced-directive-mixed.xml index cb432fe..3d34fdd 100644 --- a/docs/snippets/advanced-directive-mixed.xml +++ b/docs/snippets/advanced-directive-mixed.xml @@ -2,17 +2,17 @@ - Marlen Fay + Mr. Cristopher Hickle Sr. Foo - kaitlin00@example.org + arely.sanford@example.net - Mavis Rosenbaum + Ms. Aliza Dickens Foo - ryley89@example.com + aosinski@example.com diff --git a/docs/snippets/advanced-directive-value-1.xml b/docs/snippets/advanced-directive-value-1.xml deleted file mode 100644 index 649df25..0000000 --- a/docs/snippets/advanced-directive-value-1.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/snippets/advanced-directive-value.xml b/docs/snippets/advanced-directive-value.xml index 29be5ad..338e0d5 100644 --- a/docs/snippets/advanced-directive-value.xml +++ b/docs/snippets/advanced-directive-value.xml @@ -2,12 +2,12 @@ - Zakary Schmeler - bernadine63@example.org + Matteo Blanda + tito92@example.net - Mariam Zulauf - apfeffer@example.com + Ms. Jaqueline Kunze V + ttoy@example.org diff --git a/docs/snippets/advanced-element-attribute-1.xml b/docs/snippets/advanced-element-attribute-1.xml deleted file mode 100644 index 57f5c27..0000000 --- a/docs/snippets/advanced-element-attribute-1.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/snippets/advanced-element-attribute.xml b/docs/snippets/advanced-element-attribute.xml index 86edaf1..fbaf708 100644 --- a/docs/snippets/advanced-element-attribute.xml +++ b/docs/snippets/advanced-element-attribute.xml @@ -1,13 +1,13 @@ - + 1 - Dr. Granville Conroy + Prof. Brook Harris V - + 2 - Delilah Kshlerin + Burdette Torphy diff --git a/docs/snippets/advanced-element-header-footer-1.xml b/docs/snippets/advanced-element-header-footer-1.xml deleted file mode 100644 index 66b94dd..0000000 --- a/docs/snippets/advanced-element-header-footer-1.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - -This is a custom footer element \ No newline at end of file diff --git a/docs/snippets/advanced-element-header-footer.xml b/docs/snippets/advanced-element-header-footer.xml index b104806..2930089 100644 --- a/docs/snippets/advanced-element-header-footer.xml +++ b/docs/snippets/advanced-element-header-footer.xml @@ -3,11 +3,11 @@ 1 - Sonya Morissette + Eunice Crona 2 - Jennifer O'Kon + Roscoe Jacobs diff --git a/docs/snippets/advanced-element-info-1.xml b/docs/snippets/advanced-element-info-1.xml deleted file mode 100644 index b25c1fc..0000000 --- a/docs/snippets/advanced-element-info-1.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - -Laravel -https://example.com - - - - diff --git a/docs/snippets/advanced-element-info-before-false-1.xml b/docs/snippets/advanced-element-info-before-false-1.xml deleted file mode 100644 index aa41e9d..0000000 --- a/docs/snippets/advanced-element-info-before-false-1.xml +++ /dev/null @@ -1,9 +0,0 @@ - -Laravel -https://example.com - - - - - - diff --git a/docs/snippets/advanced-element-info-before-false.xml b/docs/snippets/advanced-element-info-before-false.xml index f22bac4..490c6f8 100644 --- a/docs/snippets/advanced-element-info-before-false.xml +++ b/docs/snippets/advanced-element-info-before-false.xml @@ -6,11 +6,11 @@ 1 - Elisabeth Fritsch + Harrison Flatley II 2 - Emmet Farrell + Emery Anderson III diff --git a/docs/snippets/advanced-element-info.xml b/docs/snippets/advanced-element-info.xml index cd88cbb..659d9aa 100644 --- a/docs/snippets/advanced-element-info.xml +++ b/docs/snippets/advanced-element-info.xml @@ -6,11 +6,11 @@ 1 - Kali Hoeger + Ayla Kunze 2 - Keith Gerlach + Prof. Verda Brekke diff --git a/docs/snippets/advanced-element-root-1.xml b/docs/snippets/advanced-element-root-1.xml deleted file mode 100644 index dc56005..0000000 --- a/docs/snippets/advanced-element-root-1.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/snippets/advanced-element-root.xml b/docs/snippets/advanced-element-root.xml index f4f2ba6..54b9b21 100644 --- a/docs/snippets/advanced-element-root.xml +++ b/docs/snippets/advanced-element-root.xml @@ -3,11 +3,11 @@ 1 - Pearline Lemke + Lavinia Wolf V 2 - Elena Mueller + Miss Katlynn Kuvalis diff --git a/docs/snippets/receipt-instagram-feed-1.xml b/docs/snippets/receipt-instagram-feed-1.xml deleted file mode 100644 index aea4e74..0000000 --- a/docs/snippets/receipt-instagram-feed-1.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - Laravel - https://example.com - - - - - - - - \ No newline at end of file diff --git a/docs/snippets/receipt-instagram-feed.xml b/docs/snippets/receipt-instagram-feed.xml index 5ef0d30..a46c58a 100644 --- a/docs/snippets/receipt-instagram-feed.xml +++ b/docs/snippets/receipt-instagram-feed.xml @@ -8,7 +8,7 @@ 1 - https://example.com/products/adipisci-sint-animi-tempore-laboriosam + https://example.com/products/veniam-voluptatem-corporis-pariatur-ut https://via.placeholder.com/640x480.png/008877?text=repudiandae https://via.placeholder.com/640x480.png/008877?text=repudiandae The Best @@ -31,7 +31,7 @@ 2 - https://example.com/products/beatae-rem-reiciendis-commodi-voluptas-enim-atque + https://example.com/products/magnam-quis-et-vitae-corporis-sed https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/000011?text=deleniti diff --git a/docs/snippets/receipt-rss-feed-1.xml b/docs/snippets/receipt-rss-feed-1.xml deleted file mode 100644 index cac8c48..0000000 --- a/docs/snippets/receipt-rss-feed-1.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/docs/snippets/receipt-rss-feed.xml b/docs/snippets/receipt-rss-feed.xml index 796239f..c277c1a 100644 --- a/docs/snippets/receipt-rss-feed.xml +++ b/docs/snippets/receipt-rss-feed.xml @@ -8,7 +8,7 @@ 1 Some category 1 - Wed, 03 Sep 2025 09:00:51 +0000 + Wed, 03 Sep 2025 08:32:01 +0000 bar @@ -17,7 +17,7 @@ 2 Some category 2 - Wed, 03 Sep 2025 21:01:28 +0000 + Wed, 03 Sep 2025 09:52:24 +0000 bar @@ -26,7 +26,7 @@ 3 Some category 3 - Wed, 03 Sep 2025 07:49:16 +0000 + Thu, 04 Sep 2025 02:15:44 +0000 bar diff --git a/docs/snippets/receipt-sitemap-feed-1.xml b/docs/snippets/receipt-sitemap-feed-1.xml deleted file mode 100644 index d817fca..0000000 --- a/docs/snippets/receipt-sitemap-feed-1.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/snippets/receipt-sitemap-feed.xml b/docs/snippets/receipt-sitemap-feed.xml index 6e89adb..e3f7ce4 100644 --- a/docs/snippets/receipt-sitemap-feed.xml +++ b/docs/snippets/receipt-sitemap-feed.xml @@ -2,12 +2,12 @@ - https://example.com/products/neque-vel-maiores-sit-amet-natus-voluptatem-dolorem + https://example.com/products/perspiciatis-ipsum-repellendus-soluta-dolorum 2025-08-31T20:00:00+00:00 0.9 - https://example.com/products/facere-facilis-assumenda-non-rerum-id-aut + https://example.com/products/autem-mollitia-qui-mollitia-culpa-debitis-veniam-vitae 2025-08-30T19:00:00+00:00 0.9 diff --git a/docs/snippets/receipt-yandex-feed-1.xml b/docs/snippets/receipt-yandex-feed-1.xml deleted file mode 100644 index d0abb44..0000000 --- a/docs/snippets/receipt-yandex-feed-1.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - -My App -My Company -My Platform -https://example.com -feeds@example.com - - - - - Foo - Bar - -bar - - - - - - - - \ No newline at end of file diff --git a/docs/snippets/receipt-yandex-feed.xml b/docs/snippets/receipt-yandex-feed.xml index 250be88..fab47ad 100644 --- a/docs/snippets/receipt-yandex-feed.xml +++ b/docs/snippets/receipt-yandex-feed.xml @@ -18,7 +18,7 @@ - https://example.com/products/nemo-omnis-neque-enim-libero-aut-quis + https://example.com/products/sed-porro-fugit-totam-molestias-sed-corrupti-facere GD-PRDCT-1 Some 1 Some description 1 @@ -29,7 +29,7 @@ bar - https://example.com/products/ratione-voluptates-sunt-quia-animi-debitis-nobis + https://example.com/products/corporis-est-sunt-ea-ut-culpa-esse-natus GD-PRDCT-2 Some 2 Some description 2 From 9ba376522691d2550e371b7b0183e86725db5f20 Mon Sep 17 00:00:00 2001 From: Andrey Helldar Date: Sat, 1 Nov 2025 02:01:38 +0300 Subject: [PATCH 7/8] Refactored `ExportService` and updated XML snippet files --- docs/snippets/advanced-directive-array.xml | 20 +++++++++---------- .../advanced-directive-attributes.xml | 10 +++++----- docs/snippets/advanced-directive-cdata.xml | 8 ++++---- docs/snippets/advanced-directive-mixed.xml | 8 ++++---- docs/snippets/advanced-directive-value.xml | 8 ++++---- docs/snippets/advanced-element-attribute.xml | 8 ++++---- .../advanced-element-header-footer.xml | 4 ++-- .../advanced-element-info-before-false.xml | 4 ++-- docs/snippets/advanced-element-info.xml | 4 ++-- docs/snippets/advanced-element-root.xml | 4 ++-- docs/snippets/receipt-instagram-feed.xml | 4 ++-- docs/snippets/receipt-rss-feed.xml | 6 +++--- docs/snippets/receipt-sitemap-feed.xml | 4 ++-- docs/snippets/receipt-yandex-feed.xml | 4 ++-- src/Services/ExportService.php | 8 +++++++- 15 files changed, 55 insertions(+), 49 deletions(-) diff --git a/docs/snippets/advanced-directive-array.xml b/docs/snippets/advanced-directive-array.xml index 2024099..144dc4c 100644 --- a/docs/snippets/advanced-directive-array.xml +++ b/docs/snippets/advanced-directive-array.xml @@ -2,18 +2,18 @@ - Andreanne Koepp - https://via.placeholder.com/640x480.png/0055bb?text=eligendi - https://via.placeholder.com/640x480.png/0044ff?text=velit - https://via.placeholder.com/640x480.png/00dd00?text=impedit - https://via.placeholder.com/640x480.png/00dd66?text=consequatur + Prof. Maximo Grady PhD + https://via.placeholder.com/640x480.png/00dd77?text=consectetur + https://via.placeholder.com/640x480.png/00eeff?text=aliquam + https://via.placeholder.com/640x480.png/007799?text=minima + https://via.placeholder.com/640x480.png/00aa55?text=commodi - Dameon Mueller - https://via.placeholder.com/640x480.png/000000?text=eos - https://via.placeholder.com/640x480.png/00bb33?text=eum - https://via.placeholder.com/640x480.png/0055ee?text=hic - https://via.placeholder.com/640x480.png/00eeaa?text=molestiae + Columbus Lesch + https://via.placeholder.com/640x480.png/005555?text=cupiditate + https://via.placeholder.com/640x480.png/00bb11?text=voluptatem + https://via.placeholder.com/640x480.png/0033aa?text=et + https://via.placeholder.com/640x480.png/00bb66?text=et diff --git a/docs/snippets/advanced-directive-attributes.xml b/docs/snippets/advanced-directive-attributes.xml index e7a004b..ae4410d 100644 --- a/docs/snippets/advanced-directive-attributes.xml +++ b/docs/snippets/advanced-directive-attributes.xml @@ -1,16 +1,16 @@ - + https://example.com - Kennith Frami - + Mr. Jameson King I + - Pansy Carroll - + Gino Gutkowski + diff --git a/docs/snippets/advanced-directive-cdata.xml b/docs/snippets/advanced-directive-cdata.xml index 3a3db46..f5292d4 100644 --- a/docs/snippets/advanced-directive-cdata.xml +++ b/docs/snippets/advanced-directive-cdata.xml @@ -2,12 +2,12 @@ - Fay Grant]]> - kub.shanon@example.com + Jose Lind]]> + hegmann.gayle@example.com - Sydney Littel]]> - jordi34@example.com + Damion Will]]> + florida48@example.net diff --git a/docs/snippets/advanced-directive-mixed.xml b/docs/snippets/advanced-directive-mixed.xml index 3d34fdd..04730bc 100644 --- a/docs/snippets/advanced-directive-mixed.xml +++ b/docs/snippets/advanced-directive-mixed.xml @@ -2,17 +2,17 @@ - Mr. Cristopher Hickle Sr. + Merl Fay Foo - arely.sanford@example.net + estella13@example.net - Ms. Aliza Dickens + Brennan Kunze PhD Foo - aosinski@example.com + halvorson.oren@example.org diff --git a/docs/snippets/advanced-directive-value.xml b/docs/snippets/advanced-directive-value.xml index 338e0d5..c819ae9 100644 --- a/docs/snippets/advanced-directive-value.xml +++ b/docs/snippets/advanced-directive-value.xml @@ -2,12 +2,12 @@ - Matteo Blanda - tito92@example.net + Mr. Clemens Rosenbaum + zieme.peggie@example.com - Ms. Jaqueline Kunze V - ttoy@example.org + Tamara Bode Sr. + franecki.macy@example.net diff --git a/docs/snippets/advanced-element-attribute.xml b/docs/snippets/advanced-element-attribute.xml index fbaf708..67e366a 100644 --- a/docs/snippets/advanced-element-attribute.xml +++ b/docs/snippets/advanced-element-attribute.xml @@ -1,13 +1,13 @@ - + 1 - Prof. Brook Harris V + Walton Schinner - + 2 - Burdette Torphy + Lance Hagenes diff --git a/docs/snippets/advanced-element-header-footer.xml b/docs/snippets/advanced-element-header-footer.xml index 2930089..3f0ae51 100644 --- a/docs/snippets/advanced-element-header-footer.xml +++ b/docs/snippets/advanced-element-header-footer.xml @@ -3,11 +3,11 @@ 1 - Eunice Crona + Dr. Bryce Schmitt Jr. 2 - Roscoe Jacobs + Elfrieda Rippin PhD diff --git a/docs/snippets/advanced-element-info-before-false.xml b/docs/snippets/advanced-element-info-before-false.xml index 490c6f8..170fc64 100644 --- a/docs/snippets/advanced-element-info-before-false.xml +++ b/docs/snippets/advanced-element-info-before-false.xml @@ -6,11 +6,11 @@ 1 - Harrison Flatley II + Minnie Hoppe DDS 2 - Emery Anderson III + Monica Jakubowski DDS diff --git a/docs/snippets/advanced-element-info.xml b/docs/snippets/advanced-element-info.xml index 659d9aa..2646393 100644 --- a/docs/snippets/advanced-element-info.xml +++ b/docs/snippets/advanced-element-info.xml @@ -6,11 +6,11 @@ 1 - Ayla Kunze + Alexandrea Jacobson 2 - Prof. Verda Brekke + Skye Stehr diff --git a/docs/snippets/advanced-element-root.xml b/docs/snippets/advanced-element-root.xml index 54b9b21..98dc475 100644 --- a/docs/snippets/advanced-element-root.xml +++ b/docs/snippets/advanced-element-root.xml @@ -3,11 +3,11 @@ 1 - Lavinia Wolf V + Twila Bartell 2 - Miss Katlynn Kuvalis + Aurore Abbott diff --git a/docs/snippets/receipt-instagram-feed.xml b/docs/snippets/receipt-instagram-feed.xml index a46c58a..e2ac230 100644 --- a/docs/snippets/receipt-instagram-feed.xml +++ b/docs/snippets/receipt-instagram-feed.xml @@ -8,7 +8,7 @@ 1 - https://example.com/products/veniam-voluptatem-corporis-pariatur-ut + https://example.com/products/voluptas-quaerat-voluptatem-est-omnis https://via.placeholder.com/640x480.png/008877?text=repudiandae https://via.placeholder.com/640x480.png/008877?text=repudiandae The Best @@ -31,7 +31,7 @@ 2 - https://example.com/products/magnam-quis-et-vitae-corporis-sed + https://example.com/products/libero-dolores-natus-laborum-enim-enim-officiis https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/009966?text=beatae https://via.placeholder.com/640x480.png/000011?text=deleniti diff --git a/docs/snippets/receipt-rss-feed.xml b/docs/snippets/receipt-rss-feed.xml index c277c1a..5009449 100644 --- a/docs/snippets/receipt-rss-feed.xml +++ b/docs/snippets/receipt-rss-feed.xml @@ -8,7 +8,7 @@ 1 Some category 1 - Wed, 03 Sep 2025 08:32:01 +0000 + Thu, 04 Sep 2025 00:18:36 +0000 bar @@ -17,7 +17,7 @@ 2 Some category 2 - Wed, 03 Sep 2025 09:52:24 +0000 + Wed, 03 Sep 2025 12:49:54 +0000 bar @@ -26,7 +26,7 @@ 3 Some category 3 - Thu, 04 Sep 2025 02:15:44 +0000 + Wed, 03 Sep 2025 20:10:14 +0000 bar diff --git a/docs/snippets/receipt-sitemap-feed.xml b/docs/snippets/receipt-sitemap-feed.xml index e3f7ce4..e8e9c7a 100644 --- a/docs/snippets/receipt-sitemap-feed.xml +++ b/docs/snippets/receipt-sitemap-feed.xml @@ -2,12 +2,12 @@ - https://example.com/products/perspiciatis-ipsum-repellendus-soluta-dolorum + https://example.com/products/eaque-quo-autem-ipsum-omnis-et 2025-08-31T20:00:00+00:00 0.9 - https://example.com/products/autem-mollitia-qui-mollitia-culpa-debitis-veniam-vitae + https://example.com/products/aut-iusto-magnam-quae-est-aut 2025-08-30T19:00:00+00:00 0.9 diff --git a/docs/snippets/receipt-yandex-feed.xml b/docs/snippets/receipt-yandex-feed.xml index fab47ad..de89044 100644 --- a/docs/snippets/receipt-yandex-feed.xml +++ b/docs/snippets/receipt-yandex-feed.xml @@ -18,7 +18,7 @@ - https://example.com/products/sed-porro-fugit-totam-molestias-sed-corrupti-facere + https://example.com/products/aliquid-odio-enim-facilis-ducimus-voluptas GD-PRDCT-1 Some 1 Some description 1 @@ -29,7 +29,7 @@ bar - https://example.com/products/corporis-est-sunt-ea-ut-culpa-esse-natus + https://example.com/products/corporis-id-unde-magni-omnis-atque GD-PRDCT-2 Some 2 Some description 2 diff --git a/src/Services/ExportService.php b/src/Services/ExportService.php index 250bf55..4896c3b 100644 --- a/src/Services/ExportService.php +++ b/src/Services/ExportService.php @@ -45,6 +45,8 @@ class ExportService protected array $content = []; + protected bool $fileCreated = false; + public function __construct( protected Feed $feed, protected FilesystemService $filesystem, @@ -123,7 +125,9 @@ protected function store(bool $force = false): void if ($force || $whenRecords || $whenLeft) { $this->records = 0; - $this->append(); + if ($this->content || ! $this->fileCreated) { + $this->append(); + } $this->content = []; } @@ -144,6 +148,8 @@ protected function getFile() // @pest-ignore-type return $this->resource; } + $this->fileCreated = true; + return $this->resource ??= value($this->createFile); } From ebae83c630d6e87bbcb340823bc57c38d76295c3 Mon Sep 17 00:00:00 2001 From: Andrey Helldar Date: Sat, 1 Nov 2025 02:10:55 +0300 Subject: [PATCH 8/8] Added `ManyFilesData` and `ManyFilesTest` --- .../advanced-directive-attributes.php | 6 ++-- docs/snippets/advanced-element-attribute.php | 4 +-- .../advanced-element-header-footer.php | 2 +- .../advanced-element-info-before-false.php | 4 +-- docs/snippets/advanced-element-info.php | 4 +-- docs/snippets/advanced-element-root.php | 2 +- docs/snippets/receipt-instagram-feed.php | 2 +- docs/snippets/receipt-rss-feed.php | 2 +- docs/snippets/receipt-sitemap-feed.php | 2 +- docs/snippets/receipt-yandex-feed.php | 2 +- src/Services/ExportService.php | 2 +- .../Feeds/Split/ManyFilesTest/export.snap | 2 ++ .../Feeds/Split/ManyFilesTest/export__2.snap | 2 ++ .../Feeds/Split/ManyFilesTest/export__3.snap | 1 + .../Feeds/Split/ManyFilesTest/export__4.snap | 1 + tests/Feature/Feeds/Split/ManyFilesTest.php | 13 +++++++++ workbench/app/Data/ManyFilesData.php | 28 +++++++++++++++++++ 17 files changed, 63 insertions(+), 16 deletions(-) create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__2.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__3.snap create mode 100644 tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__4.snap create mode 100644 tests/Feature/Feeds/Split/ManyFilesTest.php create mode 100644 workbench/app/Data/ManyFilesData.php diff --git a/docs/snippets/advanced-directive-attributes.php b/docs/snippets/advanced-directive-attributes.php index 5dc9cd8..7241a72 100644 --- a/docs/snippets/advanced-directive-attributes.php +++ b/docs/snippets/advanced-directive-attributes.php @@ -4,14 +4,14 @@ namespace App\Feeds; +use App\Feeds\Info\AttributesDirectiveFeedInfo; +use App\Feeds\Items\AttributesDirectiveFeedItem; +use App\Models\User; use DragonCode\LaravelFeed\Feeds\Feed; use DragonCode\LaravelFeed\Feeds\Info\FeedInfo; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; -use App\Feeds\Info\AttributesDirectiveFeedInfo; -use App\Feeds\Items\AttributesDirectiveFeedItem; -use App\Models\User; class AttributesDirectiveFeed extends Feed { diff --git a/docs/snippets/advanced-element-attribute.php b/docs/snippets/advanced-element-attribute.php index 7cc726e..e1801d1 100644 --- a/docs/snippets/advanced-element-attribute.php +++ b/docs/snippets/advanced-element-attribute.php @@ -4,12 +4,12 @@ namespace App\Feeds; +use App\Feeds\Items\AttributeFeedItem; +use App\Models\User; use DragonCode\LaravelFeed\Feeds\Feed; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; -use App\Feeds\Items\AttributeFeedItem; -use App\Models\User; class AttributeFeed extends Feed { diff --git a/docs/snippets/advanced-element-header-footer.php b/docs/snippets/advanced-element-header-footer.php index 9ab90bd..019dd2a 100644 --- a/docs/snippets/advanced-element-header-footer.php +++ b/docs/snippets/advanced-element-header-footer.php @@ -4,9 +4,9 @@ namespace App\Feeds; +use App\Models\User; use DragonCode\LaravelFeed\Feeds\Feed; use Illuminate\Database\Eloquent\Builder; -use App\Models\User; class HeaderFooterFeed extends Feed { diff --git a/docs/snippets/advanced-element-info-before-false.php b/docs/snippets/advanced-element-info-before-false.php index a5fbc69..0f7aa35 100644 --- a/docs/snippets/advanced-element-info-before-false.php +++ b/docs/snippets/advanced-element-info-before-false.php @@ -4,12 +4,12 @@ namespace App\Feeds; +use App\Feeds\Info\InfoMethodFeedInfo; +use App\Models\User; use DragonCode\LaravelFeed\Data\ElementData; use DragonCode\LaravelFeed\Feeds\Feed; use DragonCode\LaravelFeed\Feeds\Info\FeedInfo; use Illuminate\Database\Eloquent\Builder; -use App\Feeds\Info\InfoMethodFeedInfo; -use App\Models\User; class InfoMethodBeforeFalseTest extends Feed { diff --git a/docs/snippets/advanced-element-info.php b/docs/snippets/advanced-element-info.php index 69238ad..0016c42 100644 --- a/docs/snippets/advanced-element-info.php +++ b/docs/snippets/advanced-element-info.php @@ -4,11 +4,11 @@ namespace App\Feeds; +use App\Feeds\Info\InfoMethodFeedInfo; +use App\Models\User; use DragonCode\LaravelFeed\Feeds\Feed; use DragonCode\LaravelFeed\Feeds\Info\FeedInfo; use Illuminate\Database\Eloquent\Builder; -use App\Feeds\Info\InfoMethodFeedInfo; -use App\Models\User; class InfoMethodFeed extends Feed { diff --git a/docs/snippets/advanced-element-root.php b/docs/snippets/advanced-element-root.php index cd65346..4b0451d 100644 --- a/docs/snippets/advanced-element-root.php +++ b/docs/snippets/advanced-element-root.php @@ -4,10 +4,10 @@ namespace App\Feeds; +use App\Models\User; use DragonCode\LaravelFeed\Data\ElementData; use DragonCode\LaravelFeed\Feeds\Feed; use Illuminate\Database\Eloquent\Builder; -use App\Models\User; use function now; diff --git a/docs/snippets/receipt-instagram-feed.php b/docs/snippets/receipt-instagram-feed.php index 59a356a..1f08025 100644 --- a/docs/snippets/receipt-instagram-feed.php +++ b/docs/snippets/receipt-instagram-feed.php @@ -4,11 +4,11 @@ namespace App\Feeds; +use App\Models\Product; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use DragonCode\LaravelFeed\Presets\InstagramFeedPreset; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; -use App\Models\Product; class InstagramFeed extends InstagramFeedPreset { diff --git a/docs/snippets/receipt-rss-feed.php b/docs/snippets/receipt-rss-feed.php index 260feba..54aa89d 100644 --- a/docs/snippets/receipt-rss-feed.php +++ b/docs/snippets/receipt-rss-feed.php @@ -4,11 +4,11 @@ namespace App\Feeds; +use App\Models\News; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use DragonCode\LaravelFeed\Presets\RssFeedPreset; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; -use App\Models\News; class RssFeed extends RssFeedPreset { diff --git a/docs/snippets/receipt-sitemap-feed.php b/docs/snippets/receipt-sitemap-feed.php index c4b4726..dd1bb63 100644 --- a/docs/snippets/receipt-sitemap-feed.php +++ b/docs/snippets/receipt-sitemap-feed.php @@ -4,11 +4,11 @@ namespace App\Feeds\Sitemaps; +use App\Models\Product; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use DragonCode\LaravelFeed\Presets\SitemapFeedPreset; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; -use App\Models\Product; class ProductFeed extends SitemapFeedPreset { diff --git a/docs/snippets/receipt-yandex-feed.php b/docs/snippets/receipt-yandex-feed.php index 88483b9..29e32f2 100644 --- a/docs/snippets/receipt-yandex-feed.php +++ b/docs/snippets/receipt-yandex-feed.php @@ -4,12 +4,12 @@ namespace App\Feeds; +use App\Models\Product; use DragonCode\LaravelFeed\Feeds\Info\FeedInfo; use DragonCode\LaravelFeed\Feeds\Items\FeedItem; use DragonCode\LaravelFeed\Presets\YandexFeedPreset; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; -use App\Models\Product; use function config; diff --git a/src/Services/ExportService.php b/src/Services/ExportService.php index 4896c3b..67d2040 100644 --- a/src/Services/ExportService.php +++ b/src/Services/ExportService.php @@ -115,7 +115,7 @@ public function export(): void protected function store(bool $force = false): void { $whenRecords = $this->records >= $this->perFile; - $whenLeft = $this->total && $this->left <= 0; + $whenLeft = $this->total && $this->left <= 0; $whenFile = $this->file > 1 && ! $this->content; if (! $force && $whenFile) { diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export.snap b/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export.snap new file mode 100644 index 0000000..0385f70 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export.snap @@ -0,0 +1,2 @@ +{"id":1,"title":"Some 1","content":"Some content 1","category":"Some category 1","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} +{"id":2,"title":"Some 2","content":"Some content 2","category":"Some category 2","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__2.snap b/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__2.snap new file mode 100644 index 0000000..6713733 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__2.snap @@ -0,0 +1,2 @@ +{"id":3,"title":"Some 3","content":"Some content 3","category":"Some category 3","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} +{"id":4,"title":"Some 4","content":"Some content 4","category":"Some category 4","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__3.snap b/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__3.snap new file mode 100644 index 0000000..9cd97a4 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__3.snap @@ -0,0 +1 @@ +{"id":5,"title":"Some 5","content":"Some content 5","category":"Some category 5","created_at":"2025-09-04T04:08:12.000000Z","updated_at":"2025-09-04T04:08:12.000000Z"} \ No newline at end of file diff --git a/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__4.snap b/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__4.snap new file mode 100644 index 0000000..3d7cd51 --- /dev/null +++ b/tests/.pest/snapshots/Feature/Feeds/Split/ManyFilesTest/export__4.snap @@ -0,0 +1 @@ +end of snapshots \ No newline at end of file diff --git a/tests/Feature/Feeds/Split/ManyFilesTest.php b/tests/Feature/Feeds/Split/ManyFilesTest.php new file mode 100644 index 0000000..2c0f2f4 --- /dev/null +++ b/tests/Feature/Feeds/Split/ManyFilesTest.php @@ -0,0 +1,13 @@ + 'Some ' . $number, + 'content' => 'Some content ' . $number, + 'category' => 'Some category ' . $number, + ]; + } +}