diff --git a/README.md b/README.md index 24cef8b..fa1e271 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,8 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface; require __DIR__.'/vendor/autoload.php'; -// Initialisation of the parser -$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv'); -$parser->setHasLegend(true); - // Initialisation of the validator -$validator = new Validator($parser, Validation::createValidator()); +$validator = new Validator(); // The first field must contain an email $validator->addFieldConstraint(0, new Email()); @@ -43,7 +39,7 @@ $validator->addFieldConstraint(0, new Email()); $validator->addFieldConstraint(1, new Date()); // Validate the legend -$validator->setExceptedLegend(array('foo', 'bar', 'bim')); +$validator->setExpectedLegend(array('foo', 'bar', 'bim')); // An line must contain 3 columns $validator->addDataConstraint(new Callback(function($data, ExecutionContextInterface $context) { @@ -52,7 +48,11 @@ $validator->addDataConstraint(new Callback(function($data, ExecutionContextInter } })); -$validator->validate(); +// Initialisation of the parser +$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv'); +$parser->setHasLegend(true); + +$validator->validate($parser); if ($validator->isValid() === false) { foreach ($validator->getErrors() as $error) { @@ -73,5 +73,3 @@ EOF; } } ``` - - diff --git a/composer.json b/composer.json index 35c246e..c9aa77f 100644 --- a/composer.json +++ b/composer.json @@ -17,6 +17,6 @@ "require": { "php": ">=5.6.0", "symfony/validator": "2.*", - "deblan/csv": "dev-master" + "deblan/csv": "v1.1" } } diff --git a/example.php b/example.php index 2a475df..48250f6 100644 --- a/example.php +++ b/example.php @@ -10,12 +10,8 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface; require __DIR__.'/vendor/autoload.php'; -// Initialisation of the parser -$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv'); -$parser->setHasLegend(true); - // Initialisation of the validator -$validator = new Validator($parser, Validation::createValidator()); +$validator = new Validator(); // The first field must contain an email $validator->addFieldConstraint(0, new Email()); @@ -24,7 +20,7 @@ $validator->addFieldConstraint(0, new Email()); $validator->addFieldConstraint(1, new Date()); // Validate the legend -$validator->setExceptedLegend(array('foo', 'bar', 'bim')); +$validator->setExpectedLegend(array('foo', 'bar', 'bim')); // An line must contain 3 columns $validator->addDataConstraint(new Callback(function($data, ExecutionContextInterface $context) { @@ -33,7 +29,11 @@ $validator->addDataConstraint(new Callback(function($data, ExecutionContextInter } })); -$validator->validate(); +// Initialisation of the parser +$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv'); +$parser->setHasLegend(true); + +$validator->validate($parser); if ($validator->isValid() === false) { foreach ($validator->getErrors() as $error) { diff --git a/src/Deblan/CsvValidator/Validator.php b/src/Deblan/CsvValidator/Validator.php index 8ee6624..e6650d0 100644 --- a/src/Deblan/CsvValidator/Validator.php +++ b/src/Deblan/CsvValidator/Validator.php @@ -7,6 +7,7 @@ use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintViolationList; use Symfony\Component\Validator\Validator\RecursiveValidator; use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\Validation; /** * Class Validator @@ -52,20 +53,21 @@ class Validator /** * Constructor * - * @param CsvParser $parser * @param RecursiveValidator $validator */ - public function __construct(CsvParser $parser, RecursiveValidator $validator) + public function __construct(RecursiveValidator $validator = null) { - $this->parser = $parser; - $this->parser->parse(); + if ($validator === null) { + $validator = Validation::createValidator(); + } + $this->validator = $validator; } /** * Append a constraint to a specific column * - * @param $key The column number + * @param integer $key The column number * @param Constraint $constraint The constraint * @return Validator */ @@ -83,7 +85,6 @@ class Validator /** * Append a constraint to a specific line * - * @param $key The column number * @param Constraint $constraint The constraint * @return Validator */ @@ -95,12 +96,12 @@ class Validator } /** - * Set the excepted legend + * Set the expected legend * * @param array $legend Expected legend * @return Validator */ - public function setExceptedLegend(array $legend) + public function setExpectedLegend(array $legend) { $this->expectedLegend = $legend; @@ -109,13 +110,19 @@ class Validator /** * Run the validation + * @param CsvParser $parser */ - public function validate() + public function validate(CsvParser $parser) { - if ($this->hasValidate) { + if ($this->parser !== $parser) { + $this->parser = $parser; + $this->parser->parse(); + $this->errors = []; + } + elseif ($this->hasValidate) { return; } - + $this->validateLegend(); $this->validateDatas(); $this->validateFields(); @@ -123,7 +130,10 @@ class Validator $this->hasValidate = true; } - + + /** + * Validates the legend + */ protected function validateLegend() { if (!$this->parser->getHasLegend()) { @@ -150,7 +160,7 @@ class Validator foreach ($this->parser->getDatas() as $line => $data) { foreach ($this->dataConstraints as $constraint) { - $violations = $this->validator->validateValue($data, $constraint); + $violations = $this->validator->validate($data, $constraint); $this->mergeViolationsMessages($violations, $this->getTrueLine($line)); } @@ -177,7 +187,7 @@ class Validator ); } else { foreach ($constraints as $constraint) { - $violations = $this->validator->validateValue($data[$key], $constraint); + $violations = $this->validator->validate($data[$key], $constraint); $this->mergeViolationsMessages( $violations,