diff --git a/src/Csv/Column.php b/src/Csv/Column.php
index d873d784..3dc820a8 100644
--- a/src/Csv/Column.php
+++ b/src/Csv/Column.php
@@ -17,8 +17,8 @@
namespace JBZoo\CsvBlueprint\Csv;
use JBZoo\CsvBlueprint\Utils;
-use JBZoo\CsvBlueprint\Validators\ErrorSuite;
use JBZoo\CsvBlueprint\Validators\ColumnValidator;
+use JBZoo\CsvBlueprint\Validators\ErrorSuite;
use JBZoo\Data\Data;
final class Column
diff --git a/src/Csv/CsvFile.php b/src/Csv/CsvFile.php
index f7cdc64f..543ce522 100644
--- a/src/Csv/CsvFile.php
+++ b/src/Csv/CsvFile.php
@@ -17,8 +17,7 @@
namespace JBZoo\CsvBlueprint\Csv;
use JBZoo\CsvBlueprint\Schema;
-use JBZoo\CsvBlueprint\Utils;
-use JBZoo\CsvBlueprint\Validators\Error;
+use JBZoo\CsvBlueprint\Validators\CsvValidator;
use JBZoo\CsvBlueprint\Validators\ErrorSuite;
use League\Csv\Reader as LeagueReader;
use League\Csv\Statement;
@@ -81,17 +80,7 @@ public function getRecordsChunk(int $offset = 0, int $limit = -1): TabularDataRe
public function validate(bool $quickStop = false): ErrorSuite
{
- // $fileValidator
-
- $errors = new ErrorSuite($this->getCsvFilename());
-
- $errors
- ->addErrorSuit($this->validateFile($quickStop))
- ->addErrorSuit($this->validateHeader($quickStop))
- ->addErrorSuit($this->validateEachCell($quickStop))
- ->addErrorSuit(self::validateAggregateRules($quickStop));
-
- return $errors;
+ return (new CsvValidator($this, $this->schema))->validate($quickStop);
}
private function prepareReader(): LeagueReader
@@ -110,93 +99,4 @@ private function prepareReader(): LeagueReader
return $reader;
}
-
- private function validateHeader(bool $quickStop = false): ErrorSuite
- {
- $errors = new ErrorSuite();
-
- if (!$this->getCsvStructure()->isHeader()) {
- return $errors;
- }
-
- foreach ($this->schema->getColumns() as $column) {
- if ($column->getName() === '') {
- $error = new Error(
- 'csv.header',
- "Property \"name\" is not defined in schema: \"{$this->schema->getFilename()}\"",
- $column->getHumanName(),
- 1,
- );
-
- $errors->addError($error);
- }
-
- if ($quickStop && $errors->count() > 0) {
- return $errors;
- }
- }
-
- return $errors;
- }
-
- private function validateEachCell(bool $quickStop = false): ErrorSuite
- {
- $errors = new ErrorSuite();
-
- foreach ($this->getRecords() as $line => $record) {
- $columns = $this->schema->getColumnsMappedByHeader($this->getHeader());
-
- foreach ($columns as $column) {
- if ($column === null) {
- continue;
- }
-
- $errors->addErrorSuit($column->validate($record[$column->getKey()], (int)$line + 1));
- if ($quickStop && $errors->count() > 0) {
- return $errors;
- }
- }
- }
-
- return $errors;
- }
-
- private function validateFile(bool $quickStop = false): ErrorSuite
- {
- $errors = new ErrorSuite();
-
- $filenamePattern = $this->schema->getFilenamePattern();
- if (
- $filenamePattern !== null
- && $filenamePattern !== ''
- && \preg_match($filenamePattern, $this->csvFilename) === 0
- ) {
- $error = new Error(
- 'filename_pattern',
- 'Filename "' . Utils::cutPath($this->csvFilename) .
- "\" does not match pattern: \"{$filenamePattern}\"",
- '',
- 0,
- );
-
- $errors->addError($error);
-
- if ($quickStop && $errors->count() > 0) {
- return $errors;
- }
- }
-
- return $errors;
- }
-
- private static function validateAggregateRules(bool $quickStop = false): ErrorSuite
- {
- $errors = new ErrorSuite();
-
- if ($quickStop && $errors->count() > 0) {
- return $errors;
- }
-
- return new ErrorSuite();
- }
}
diff --git a/src/Validators/AbstractValidator.php b/src/Validators/AbstractValidator.php
deleted file mode 100644
index de339246..00000000
--- a/src/Validators/AbstractValidator.php
+++ /dev/null
@@ -1,22 +0,0 @@
-csv = $csv;
+ $this->schema = $schema;
+ $this->errors = new ErrorSuite($this->csv->getCsvFilename());
+ }
+
+ public function validate(bool $quickStop = false): ErrorSuite
+ {
+ return $this->errors
+ ->addErrorSuit($this->validateFile($quickStop))
+ ->addErrorSuit($this->validateHeader($quickStop))
+ ->addErrorSuit($this->validateEachCell($quickStop))
+ ->addErrorSuit(self::validateAggregateRules($quickStop));
+ }
+
+ private function validateHeader(bool $quickStop = false): ErrorSuite
+ {
+ $errors = new ErrorSuite();
+
+ if (!$this->schema->getCsvStructure()->isHeader()) {
+ return $errors;
+ }
+
+ foreach ($this->schema->getColumns() as $column) {
+ if ($column->getName() === '') {
+ $error = new Error(
+ 'csv.header',
+ "Property \"name\" is not defined in schema: \"{$this->schema->getFilename()}\"",
+ $column->getHumanName(),
+ 1,
+ );
+
+ $errors->addError($error);
+ }
+
+ if ($quickStop && $errors->count() > 0) {
+ return $errors;
+ }
+ }
+
+ return $errors;
+ }
+
+ private function validateEachCell(bool $quickStop = false): ErrorSuite
+ {
+ $errors = new ErrorSuite();
+
+ foreach ($this->csv->getRecords() as $line => $record) {
+ $columns = $this->schema->getColumnsMappedByHeader($this->csv->getHeader());
+
+ foreach ($columns as $column) {
+ if ($column === null) {
+ continue;
+ }
+
+ $errors->addErrorSuit($column->validate($record[$column->getKey()], (int)$line + 1));
+ if ($quickStop && $errors->count() > 0) {
+ return $errors;
+ }
+ }
+ }
+
+ return $errors;
+ }
+
+ private function validateFile(bool $quickStop = false): ErrorSuite
+ {
+ $errors = new ErrorSuite();
+
+ $filenamePattern = $this->schema->getFilenamePattern();
+ if (
+ $filenamePattern !== null
+ && $filenamePattern !== ''
+ && \preg_match($filenamePattern, $this->csv->getCsvFilename()) === 0
+ ) {
+ $error = new Error(
+ 'filename_pattern',
+ 'Filename "' . Utils::cutPath($this->csv->getCsvFilename()) .
+ "\" does not match pattern: \"{$filenamePattern}\"",
+ '',
+ 0,
+ );
+
+ $errors->addError($error);
+
+ if ($quickStop && $errors->count() > 0) {
+ return $errors;
+ }
+ }
+
+ return $errors;
+ }
+
+ private static function validateAggregateRules(bool $quickStop = false): ErrorSuite
+ {
+ $errors = new ErrorSuite();
+
+ if ($quickStop && $errors->count() > 0) {
+ return $errors;
+ }
+
+ return new ErrorSuite();
+ }
+}
diff --git a/src/Validators/ScvValidator.php b/src/Validators/ScvValidator.php
deleted file mode 100644
index 7bdc0011..00000000
--- a/src/Validators/ScvValidator.php
+++ /dev/null
@@ -1,25 +0,0 @@
-