diff --git a/src/Sheet/FingersCrossed/Loader.php b/src/Sheet/FingersCrossed/Loader.php index dcdc77e..de452ff 100644 --- a/src/Sheet/FingersCrossed/Loader.php +++ b/src/Sheet/FingersCrossed/Loader.php @@ -11,54 +11,53 @@ use Box\Spout\Writer\WriterInterface; use Kiboko\Component\Bucket\AcceptanceResultBucket; use Kiboko\Component\Bucket\EmptyResultBucket; -use Kiboko\Contract\Bucket\ResultBucketInterface; -use Kiboko\Contract\Pipeline\FlushableInterface; +use Kiboko\Component\Bucket\RejectionResultBucket; use Kiboko\Contract\Pipeline\LoaderInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; -final readonly class Loader implements LoaderInterface, FlushableInterface +final readonly class Loader implements LoaderInterface { public function __construct( private WriterInterface $writer, - private string $sheetName, private LoggerInterface $logger = new NullLogger() ) { - /* @phpstan-ignore-next-line */ - $this->writer->getCurrentSheet()->setName($this->sheetName); } public function load(): \Generator { - $line = yield; + $line = yield new EmptyResultBucket(); try { $this->writer->addRow( new Row(array_map(fn ($value) => new Cell($value), array_keys($line)), null) ); - } catch (WriterNotOpenedException|IOException $exception) { + } catch (IOException|WriterNotOpenedException $exception) { $this->logger->error('Impossible to load data to the given CSV file.', ['line' => $line, 'message' => $exception->getMessage(), 'previous' => $exception->getPrevious()]); - - return; + $line = yield new RejectionResultBucket( + 'Impossible to load data to the given CSV file.', + $exception, + $line + ); } + /* @phpstan-ignore-next-line */ while (true) { try { $this->writer->addRow( new Row(array_map(fn ($value) => new Cell($value), $line), null) ); - } catch (WriterNotOpenedException|IOException $exception) { + } catch (IOException|WriterNotOpenedException $exception) { $this->logger->error('Impossible to load data to the given CSV file.', ['line' => $line, 'message' => $exception->getMessage(), 'previous' => $exception->getPrevious()]); + $line = yield new RejectionResultBucket( + 'Impossible to load data to the given CSV file.', + $exception, + $line + ); + continue; } $line = yield new AcceptanceResultBucket($line); } } - - public function flush(): ResultBucketInterface - { - $this->writer->close(); - - return new EmptyResultBucket(); - } } diff --git a/src/Sheet/Safe/Loader.php b/src/Sheet/Safe/Loader.php index d00e6b5..c863ad6 100644 --- a/src/Sheet/Safe/Loader.php +++ b/src/Sheet/Safe/Loader.php @@ -11,26 +11,21 @@ use Box\Spout\Writer\WriterInterface; use Kiboko\Component\Bucket\AcceptanceResultBucket; use Kiboko\Component\Bucket\EmptyResultBucket; -use Kiboko\Contract\Bucket\ResultBucketInterface; -use Kiboko\Contract\Pipeline\FlushableInterface; use Kiboko\Contract\Pipeline\LoaderInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; -final readonly class Loader implements LoaderInterface, FlushableInterface +final readonly class Loader implements LoaderInterface { public function __construct( private WriterInterface $writer, - private string $sheetName, private LoggerInterface $logger = new NullLogger() ) { - /* @phpstan-ignore-next-line */ - $this->writer->getCurrentSheet()->setName($this->sheetName); } public function load(): \Generator { - $line = yield; + $line = yield new EmptyResultBucket(); $headers = array_keys($line); try { $this->writer->addRow( @@ -42,6 +37,7 @@ public function load(): \Generator return; } + /* @phpstan-ignore-next-line */ while (true) { try { $this->writer->addRow($this->orderColumns($headers, $line)); @@ -62,11 +58,4 @@ private function orderColumns(array $headers, array $line): Row return new Row($result, null); } - - public function flush(): ResultBucketInterface - { - $this->writer->close(); - - return new EmptyResultBucket(); - } } diff --git a/tests/functional/Sheet/FingersCrossed/ExcelLoaderTest.php b/tests/functional/Sheet/FingersCrossed/ExcelLoaderTest.php index 49911a9..6369a08 100644 --- a/tests/functional/Sheet/FingersCrossed/ExcelLoaderTest.php +++ b/tests/functional/Sheet/FingersCrossed/ExcelLoaderTest.php @@ -74,9 +74,11 @@ public function load(): void 'last name' => 'dupont', ], ], - new Loader($this->writer, 'Sheet1') + new Loader($this->writer) ); + $this->writer->close(); + $this->assertRowWasWrittenToExcel( /* 'vfs://test.xlsx' */ $path, 'Sheet1', diff --git a/tests/functional/Sheet/FingersCrossed/OpenDocumentLoaderTest.php b/tests/functional/Sheet/FingersCrossed/OpenDocumentLoaderTest.php index 6794e82..16a7db9 100644 --- a/tests/functional/Sheet/FingersCrossed/OpenDocumentLoaderTest.php +++ b/tests/functional/Sheet/FingersCrossed/OpenDocumentLoaderTest.php @@ -74,9 +74,11 @@ public function load(): void 'last name' => 'dupont', ], ], - new Loader($this->writer, 'Sheet1') + new Loader($this->writer) ); + $this->writer->close(); + $this->assertRowWasWrittenToOpenDocument( /* 'vfs://test.ods' */ $path, 'Sheet1', diff --git a/tests/functional/Sheet/Safe/ExcelLoaderTest.php b/tests/functional/Sheet/Safe/ExcelLoaderTest.php index d794c4a..01255fc 100644 --- a/tests/functional/Sheet/Safe/ExcelLoaderTest.php +++ b/tests/functional/Sheet/Safe/ExcelLoaderTest.php @@ -74,9 +74,11 @@ public function load(): void 'last name' => 'dupont', ], ], - new Loader($this->writer, 'Sheet1') + new Loader($this->writer) ); + $this->writer->close(); + $this->assertRowWasWrittenToExcel( /* 'vfs://test.xlsx' */ $path, 'Sheet1', diff --git a/tests/functional/Sheet/Safe/OpenDocumentLoaderTest.php b/tests/functional/Sheet/Safe/OpenDocumentLoaderTest.php index 4b85834..ddb14d0 100644 --- a/tests/functional/Sheet/Safe/OpenDocumentLoaderTest.php +++ b/tests/functional/Sheet/Safe/OpenDocumentLoaderTest.php @@ -74,9 +74,11 @@ public function load(): void 'last name' => 'dupont', ], ], - new Loader($this->writer, 'Sheet1') + new Loader($this->writer) ); + $this->writer->close(); + $this->assertRowWasWrittenToOpenDocument( /* 'vfs://test.ods' */ $path, 'Sheet1',