/** * @covers Yosmanyga\Validation\Validator\ExceptionValidator::validate * @expectedException \RuntimeException */ public function testValidateThrowsExceptionWhenValidatorReturnsErrors() { $value = 'foo'; $validator = $this->getMock('Yosmanyga\\Validation\\Validator\\ValidatorInterface'); $validator->expects($this->once())->method('validate')->with($value)->will($this->returnValue(array(new Error('')))); /** @var \Yosmanyga\Validation\Validator\ValidatorInterface $validator */ $exceptionValidator = new ExceptionValidator($validator); $exceptionValidator->validate($value); }
private function validate($data) { $r = new \ReflectionClass($this); $properties = $r->getProperties(); $allowedKeys = array(); foreach ($properties as $property) { $allowedKeys[] = $property->name; } $validator = new ExceptionValidator(new ArrayValidator(array('allowedKeys' => $allowedKeys, 'allowExtra' => false))); return $validator->validate($data); }
protected function normalizeValidators($validators, $resource) { $validatorValidator = new ExceptionValidator(new ArrayValidator(array('allowedKeys' => array('name', 'option'), 'allowExtra' => false))); if (!is_integer(key($validators))) { $validators = array($validators); } $definitions = array(); foreach ($validators as $validator) { $validatorValidator->validate($validator); $definitions[] = $this->delegator->normalize(array('value' => $validator), $resource); } return $definitions; }
/** * @param \Yosmanyga\Validation\Resource\Definition\ArrayDefinition $definition * * @return \Yosmanyga\Validation\Validator\ArrayValidator */ public function compile($definition) { $validator = new ExceptionValidator($definition->createValidator()); $validator->validate($definition); // Try to compile map option // Just works if map is a validator try { $definition->map = $this->compiler->compile($definition->map); } catch (\RuntimeException $e) { // Ignore it if fails // Map could be a closure or anything else callable } return new ArrayValidator($definition->export()); }
protected function normalizeProperties($properties, $resource) { $validatorValidator = new ExceptionValidator(new ArrayValidator(array('requiredKeys' => array('validator'), 'allowedKeys' => array('options'), 'allowExtra' => false))); $definitions = array(); foreach ($properties as $property => $validators) { foreach ($validators as $id => $validator) { if (!is_integer($id)) { $validator = array('validator' => $id, 'options' => $validator); } $validatorValidator->validate($validator); $definitions[$property][] = $this->delegator->normalize(array('key' => $validator['validator'], 'value' => $validator['options']), $resource); } } return $definitions; }