Several Improvements:

-Simplified defaultTemplates on Exceptions
	-Exceptions now can be iterated and recursively iterated
	-Messages built by RecursiveTreeIterator (SPL), faster an simpler
	-attribute, key and composite exceptions message plays nicer (no redundant messages)
This commit is contained in:
Alexandre (@alganet) 2011-01-30 22:17:06 -02:00
parent 03b2aca115
commit 5830711f5a
43 changed files with 269 additions and 196 deletions

View file

@ -0,0 +1,27 @@
<?php
namespace Respect\Validation;
use \RecursiveArrayIterator;
use Respect\Validation\Exceptions\ValidationException;
use Respect\Validation\Exceptions\AbstractCompositeException;
class ExceptionIterator extends RecursiveArrayIterator
{
public function __construct($target)
{
parent::__construct(is_array($target) ? $target : array($target));
}
public function hasChildren()
{
return (bool) $this->current()->getRelated();
}
public function getChildren()
{
return new static($this->current()->getRelated());
}
}

View file

@ -2,30 +2,28 @@
namespace Respect\Validation\Exceptions;
class AbstractCompositeException extends ValidationException
class AbstractCompositeException extends AbstractRelatedException
{
const INVALID_NONE= 'AbstractComposite_1';
const INVALID_SOME= 'AbstractComposite_2';
public static $defaultTemplates = array(
self::INVALID_NONE => 'None of the rules passed',
self::INVALID_SOME => '%2$d rules did not passed',
'None of the rules passed',
'%2$d rules did not passed',
);
public function chooseTemplate($input, $numFailed, $numRequired, $numTotal)
{
if ($numFailed === $numTotal)
return static::INVALID_NONE;
return 0;
else
return static::INVALID_SOME;
return 1;
}
public function renderMessage()
public function getMainMessage()
{
if (1 === count($this->related)) {
$this->message = $this->related[0]->getMessage();
} else {
parent::renderMessage();
}
if (1 === count($this->related))
return $this->related[0]->getMainMessage();
else
return parent::getMainMessage();
}
}

View file

@ -0,0 +1,16 @@
<?php
namespace Respect\Validation\Exceptions;
abstract class AbstractRelatedException extends ValidationException
{
public function getRelated()
{
if (1 === count($this->related))
return $this->related[0]->getRelated();
else
return parent::getRelated();
}
}

View file

@ -6,8 +6,8 @@ class AllOfException extends AbstractCompositeException
{
public static $defaultTemplates = array(
self::INVALID_NONE => 'None of %3$d required rules passed',
self::INVALID_SOME => '%2$d of %3$d required rules did not passed',
'None of %3$d required rules passed',
'%2$d of %3$d required rules did not passed',
);
}

View file

@ -4,19 +4,18 @@ namespace Respect\Validation\Exceptions;
class AlnumException extends ValidationException
{
const INVALID_ALNUM = 'Alnum_1';
const INVALID_ALNUM_CHARS = 'Alnum_2';
public static $defaultTemplates = array(
self::INVALID_ALNUM => '"%s" does not contain only letters and digits',
self::INVALID_ALNUM_CHARS => '"%s" does not contain only letters, digits and "%s"'
'"%s" does not contain only letters and digits',
'"%s" does not contain only letters, digits and "%s"'
);
public function chooseTemplate($input, $additionalCharacters=null)
{
if (empty($additionalCharacters))
return self::INVALID_ALNUM;
return 0;
else
return self::INVALID_ALNUM_CHARS;
return 1;
}
}

View file

@ -4,19 +4,18 @@ namespace Respect\Validation\Exceptions;
class AlphaException extends ValidationException
{
const INVALID_ALPHA = 'Alpha_1';
const INVALID_ALPHA_CHARS = 'Alpha_2';
public static $defaultTemplates = array(
self::INVALID_ALPHA => '"%s" does not contain only letters',
self::INVALID_ALPHA_CHARS => '"%s" does not contain only letters and "%s"'
'"%s" does not contain only letters',
'"%s" does not contain only letters and "%s"'
);
public function chooseTemplate($input, $additionalCharacters=null)
{
if (empty($additionalCharacters))
return self::INVALID_ALPHA;
return 0;
else
return self::INVALID_ALPHA_CHARS;
return 1;
}
}

View file

@ -4,9 +4,8 @@ namespace Respect\Validation\Exceptions;
class ArrException extends ValidationException
{
const INVALID_ARR = 'Arr_1';
public static $defaultTemplates = array(
self::INVALID_ARR => '"%s" is not an array',
'"%s" is not an array',
);
}

View file

@ -6,8 +6,8 @@ class AtLeastException extends AbstractCompositeException
{
public static $defaultTemplates = array(
self::INVALID_NONE => 'None of %4$d rules passed (%3$d required)',
self::INVALID_SOME => '%2$d of %4$d rules did not passed (%3$d required)',
'None of %4$d rules passed (%3$d required)',
'%2$d of %4$d rules did not passed (%3$d required)',
);
}

View file

@ -2,21 +2,20 @@
namespace Respect\Validation\Exceptions;
class AttributeException extends ValidationException
class AttributeException extends AbstractRelatedException
{
const INVALID_ATTRIBUTE= 'Attribute_1';
const INVALID_ATTRIBUTE_RELATED = 'Attribute_2';
public static $defaultTemplates = array(
self::INVALID_ATTRIBUTE => '"%2$s" is not present',
self::INVALID_ATTRIBUTE_RELATED => '"%2$s" is invalid',
'"%2$s" is not present',
'"%2$s" is invalid',
);
public function chooseTemplate($input, $attributeName, $hasTheAttribute)
{
if (!$hasTheAttribute)
return self::INVALID_ATTRIBUTE;
return 0;
else
return self::INVALID_ATTRIBUTE_RELATED;
return 1;
}
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class BetweenException extends ValidationException
{
const INVALID_BETWEEN= 'Between_1';
public static $defaultTemplates = array(
self::INVALID_BETWEEN => '"%s" is out of bounds',
'"%s" is out of bounds',
);
}

View file

@ -2,12 +2,7 @@
namespace Respect\Validation\Exceptions;
class CallException extends ValidationException
class CallException extends AbstractRelatedException
{
public function renderMessage()
{
$this->message = $this->related[0]->getMessage();
}
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class CallbackException extends ValidationException
{
const INVALID_CALLBACK= 'Callback_1';
public static $defaultTemplates = array(
self::INVALID_CALLBACK => '"%s" is invalid',
'"%s" is invalid',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class DateException extends ValidationException
{
const INVALID_DATE= 'Date_1';
public static $defaultTemplates = array(
self::INVALID_DATE => '"%s" is not a valid date (format: %s)',
'"%s" is not a valid date (format: %s)',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class DigitsException extends ValidationException
{
const INVALID_DIGITS= 'Digits_1';
public static $defaultTemplates = array(
self::INVALID_DIGITS => '"%s" does not contain only digits',
'"%s" does not contain only digits',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class EachException extends ValidationException
{
const INVALID_EACH= 'Each_1';
public static $defaultTemplates = array(
self::INVALID_EACH => '%3$d invalid itens found',
'%3$d invalid itens found',
);
}

View file

@ -4,19 +4,18 @@ namespace Respect\Validation\Exceptions;
class EqualsException extends ValidationException
{
const INVALID_EQUALS= 'Equals_1';
const INVALID_IDENTICAL= 'Equals_2';
public static $defaultTemplates = array(
self::INVALID_EQUALS => '"%s" is not equals "%s"',
self::INVALID_IDENTICAL => '"%s" is not identical to "%s"',
'"%s" is not equals "%s"',
'"%s" is not identical to "%s"',
);
public function chooseTemplate($input, $equals, $identical)
{
if ($identical)
return self::INVALID_IDENTICAL;
return 1;
else
return self::INVALID_EQUALS;
return 0;
}
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class FloatException extends ValidationException
{
const INVALID_FLOAT= 'Float_1';
public static $defaultTemplates = array(
self::INVALID_FLOAT => '"%s" is not a valid float',
'"%s" is not a valid float',
);
}

View file

@ -4,9 +4,8 @@ namespace Respect\Validation\Exceptions;
class HexaException extends ValidationException
{
const INVALID_HEXA= 'Hexa_1';
public static $defaultTemplates = array(
self::INVALID_HEXA => '"%s" is not a valid hexadecimal number',
'"%s" is not a valid hexadecimal number',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class InException extends ValidationException
{
const INVALID_IN = 'In_1';
public static $defaultTemplates = array(
self::INVALID_IN => '"%s" is not in %s',
'"%s" is not in %s',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class InstanceException extends ValidationException
{
const INVALID_INSTANCE= 'Instance_1';
public static $defaultTemplates = array(
self::INVALID_INSTANCE => '"%s" is not an instance of "%s"',
'"%s" is not an instance of "%s"',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class IntException extends ValidationException
{
const INVALID_INT= 'Int_1';
public static $defaultTemplates = array(
self::INVALID_INT => '"%s" is not a valid integer number',
'"%s" is not a valid integer number',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class IpException extends ValidationException
{
const INVALID_IP= 'Ip_1';
public static $defaultTemplates = array(
self::INVALID_IP => '"%s" is not a valid IP address',
'"%s" is not a valid IP address',
);
}

View file

@ -2,21 +2,19 @@
namespace Respect\Validation\Exceptions;
class KeyException extends ValidationException
class KeyException extends AbstractRelatedException
{
const INVALID_KEY= 'Key_1';
const INVALID_KEY_RELATED = 'Key_2';
public static $defaultTemplates = array(
self::INVALID_KEY => '"%2$s" is not present',
self::INVALID_KEY_RELATED => '"%2$s" is invalid',
'"%2$s" is not present',
'"%2$s" is invalid',
);
public function chooseTemplate($input, $attributeName, $TheAttribute)
public function chooseTemplate($input, $attributeName, $theAttribute)
{
if (!$TheAttribute)
return self::INVALID_KEY;
if (!$theAttribute)
return 0;
else
return self::INVALID_KEY_RELATED;
return 1;
}
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class LengthException extends ValidationException
{
const INVALID_LENGTH= 'Length_1';
public static $defaultTemplates = array(
self::INVALID_LENGTH => '"%s" length is not between %d and %d',
'"%s" length is not between %d and %d',
);
}

View file

@ -4,18 +4,18 @@ namespace Respect\Validation\Exceptions;
class MaxException extends ValidationException
{
const INVALID_MAX= 'Max_1';
const INVALID_MAX_INCLUSIVE= 'Max_2';
public static $defaultTemplates = array(
self::INVALID_MAX => '%s is greater than %s',
self::INVALID_MAX_INCLUSIVE => '%s is greater than %s (inclusive)',
'%s is greater than %s',
'%s is greater than %s (inclusive)',
);
public function chooseTemplate($input, $inclusive)
{
if ($inclusive)
return self::INVALID_MAX;
return 0;
else
return self::INVALID_MAX_INCLUSIVE;
return 1;
}
}

View file

@ -4,19 +4,18 @@ namespace Respect\Validation\Exceptions;
class MinException extends ValidationException
{
const INVALID_MIN= 'Min_1';
const INVALID_MIN_INCLUSIVE= 'Min_2';
public static $defaultTemplates = array(
self::INVALID_MIN => '%s is lower than %s',
self::INVALID_MIN_INCLUSIVE => '%s is lower than %s (inclusive)',
'%s is lower than %s',
'%s is lower than %s (inclusive)',
);
public function chooseTemplate($input, $inclusive)
{
if ($inclusive)
return self::INVALID_MIN;
return 0;
else
return self::INVALID_MIN_INCLUSIVE;
return 1;
}
}

View file

@ -6,8 +6,8 @@ class MostOfException extends AbstractCompositeException
{
public static $defaultTemplates = array(
self::INVALID_NONE => 'None of %3$d required rules passed',
self::INVALID_SOME => '%2$d of %3$d required rules did not passed',
'None of %3$d required rules passed',
'%2$d of %3$d required rules did not passed',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class NegativeException extends ValidationException
{
const INVALID_NEGATIVE= 'Negative_1';
public static $defaultTemplates = array(
self::INVALID_NEGATIVE => '%d is not a negative number',
'"%d" is not a negative number',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class NoWhitespaceException extends ValidationException
{
const INVALID_NO_WHITESPACE= 'NoWhitespace_1';
public static $defaultTemplates = array(
self::INVALID_NO_WHITESPACE => '"%s" contains whitespace',
'"%s" contains whitespace',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class NoneOfException extends ValidationException
{
const INVALID_NONEOF= 'Hexa_1';
public static $defaultTemplates = array(
self::INVALID_NONEOF => 'None of the %3$d must pass. %3$d passed',
'None of the %4$d rules must pass. %2$d passed',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class NotEmptyException extends ValidationException
{
const INVALID_NOT_EMPTY= 'NotEmpty_1';
public static $defaultTemplates = array(
self::INVALID_NOT_EMPTY => 'The provided value is empty',
'The provided value is empty',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class NullValueException extends ValidationException
{
const INVALID_NULL_VALUE= 'NullValue_1';
public static $defaultTemplates = array(
self::INVALID_NULL_VALUE => '"%s" is not a null value',
'"%s" is not a null value',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class NumericException extends ValidationException
{
const INVALID_NUMERIC= 'Numeric_1';
public static $defaultTemplates = array(
self::INVALID_NUMERIC => '"%s" is not a numeric value',
'"%s" is not a numeric value',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class ObjectException extends ValidationException
{
const INVALID_OBJECT= 'Object_1';
public static $defaultTemplates = array(
self::INVALID_OBJECT => '"%s" is not an object',
'"%s" is not an object',
);
}

View file

@ -6,8 +6,8 @@ class OneOfException extends AbstractCompositeException
{
public static $defaultTemplates = array(
self::INVALID_NONE => 'None of the %4$d rules passed',
self::INVALID_SOME => '%2$d of the %4$d rules did not passed',
'None of the %4$d rules passed',
'%2$d of the %4$d rules did not passed',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class PositiveException extends ValidationException
{
const INVALID_POSITIVE= 'Positive_1';
public static $defaultTemplates = array(
self::INVALID_POSITIVE => '%d is not a positive number',
'"%d" is not a positive number',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class RegexException extends ValidationException
{
const INVALID_REGEX= 'Regex_1';
public static $defaultTemplates = array(
self::INVALID_REGEX => '"%s" is invalid',
'"%s" is invalid',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class SfException extends ValidationException
{
const INVALID_SF= 'Sf_1';
public static $defaultTemplates = array(
self::INVALID_SF => '%s',
'%s',
);
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class StringException extends ValidationException
{
const INVALID_STRING= 'String_1';
public static $defaultTemplates = array(
self::INVALID_STRING => '"%s" is not a valid string',
'"%s" is not a valid string',
);
}

View file

@ -4,14 +4,15 @@ namespace Respect\Validation\Exceptions;
use \InvalidArgumentException;
use \Exception;
use \RecursiveTreeIterator;
use Respect\Validation\ExceptionIterator;
class ValidationException extends InvalidArgumentException
{
const INVALID = 'Validation_1';
public static $defaultTemplates = array(
self::INVALID => 'Data validation failed: "%s"'
'Data validation failed: "%s"'
);
protected $messageTemplate;
protected $related = array();
protected $params = array();
@ -31,10 +32,7 @@ class ValidationException extends InvalidArgumentException
return is_object($mixed) ? get_class($mixed) : strval($mixed);
}, func_get_args()
);
$this->useTemplate(
call_user_func_array(array($this, 'chooseTemplate'), $this->params)
);
$this->renderMessage();
$this->message = $this->getMainMessage();
return $this;
}
@ -43,40 +41,50 @@ class ValidationException extends InvalidArgumentException
return array_shift(array_keys(static::$defaultTemplates));
}
public function renderMessage()
public function getFullMessage()
{
$message = array();
foreach (new RecursiveTreeIterator(new ExceptionIterator($this)) as $m)
$message[] = $m;
return implode(PHP_EOL, $message);
}
public function getMainMessage()
{
$sprintfParams = $this->params;
array_unshift($sprintfParams, $this->messageTemplate);
$this->message = call_user_func_array('sprintf', $sprintfParams);
$relatedMessages = array();
foreach ($this->related as $n => $related) {
$relatedMessage = "-" . $related->getMessage();
$relatedMessage = str_replace("\n", "\n ", $relatedMessage);
$relatedMessages[] = $relatedMessage;
}
if (!empty($relatedMessages))
$this->message .= "\n" . implode("\n", $relatedMessages);
array_unshift($sprintfParams, $this->getTemplate());
return call_user_func_array('sprintf', $sprintfParams);
}
public function getRelated()
{
return $this->related;
}
public function setRelated(array $relatedExceptions)
{
foreach ($relatedExceptions as $related)
$this->addRelated($related, false);
$this->renderMessage();
$this->addRelated($related);
return $this;
}
public function addRelated(Exception $related, $render=true)
public function addRelated(Exception $related)
{
$this->related[] = $related;
if ($render)
$this->renderMessage();
return $this;
}
public function useTemplate($code)
public function getTemplate()
{
$this->messageTemplate = @static::$defaultTemplates[$code];
$templateKey = call_user_func_array(
array($this, 'chooseTemplate'), $this->params
);
return static::$defaultTemplates[$templateKey];
}
public function __toString()
{
return $this->getMainMessage();
}
}

View file

@ -4,9 +4,9 @@ namespace Respect\Validation\Exceptions;
class ZendException extends ValidationException
{
const INVALID_Zend= 'Zend_1';
public static $defaultTemplates = array(
self::INVALID_Zend => '%s',
'%s',
);
}

View file

@ -10,8 +10,8 @@
<email>alexandre@gaigalas.net</email>
<active>yes</active>
</lead>
<date>2010-12-23</date>
<time>18:15:47</time>
<date>2011-01-30</date>
<time>22:16:21</time>
<version>
<release>0.1.0</release>
<api>0.1.0</api>
@ -26,46 +26,47 @@ First Version
</notes>
<contents>
<dir baseinstalldir="Respect/Validation" name="/">
<file baseinstalldir="Respect/Validation" md5sum="f7d4c5d7be5c29a7d2cdf82d575019ef" name="Exceptions/AbstractCompositeException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="3deba60f5fd7d9bf07592b428364b971" name="Exceptions/AllOfException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="4289b2053b7ab5c91fcc405f8faaff41" name="Exceptions/AlnumException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="e35e1c9f991cfb639905d7b3e1adf158" name="Exceptions/AlphaException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="67e61d17308657a5d4f7b85cb35bb9d9" name="Exceptions/ArrException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="46cb557a64f078d55acc85b7c6120d17" name="Exceptions/AtLeastException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="0bc8177eb2b29c60511effe6e74e3e19" name="Exceptions/AttributeException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="9b8af2fd7fbcaf5b209f5eb0c7481205" name="Exceptions/BetweenException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="14ad1a0e0bd01b8c406040b7a8644f1d" name="Exceptions/CallbackException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="ddae18ee18fd6fc523e8c5bb473911fc" name="Exceptions/CallException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="2b43972a658c2c2718450aa19dafaf52" name="Exceptions/AbstractCompositeException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="8c8ee6b8f8bca17d86656bc9957ddaaa" name="Exceptions/AbstractRelatedException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="565d57a097cf70774e4ea33fc99393f0" name="Exceptions/AllOfException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="46017dc1595397db626c15b59fa91d5f" name="Exceptions/AlnumException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="eeb389f70376f35780660a96e0124b2e" name="Exceptions/AlphaException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="87e039b3a5b7bee95571cff6163616db" name="Exceptions/ArrException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="de256f654655018225790cf7417a49b8" name="Exceptions/AtLeastException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="8ff9930ae40fa10b58675c700016528f" name="Exceptions/AttributeException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="b33e57b6b4eca4c81145d97f7f736423" name="Exceptions/BetweenException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="44b39dc2ff0077e205661e7939745cb4" name="Exceptions/CallbackException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="0d1b8a28e719230c2084a1f69a6beec4" name="Exceptions/CallException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="dccb83d6730328467bd0935caea42b04" name="Exceptions/ComponentException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="6f69e750f52d701e4e36e69f1b157ce1" name="Exceptions/DateException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="aa654a828c3bd02c067d34a4c121ea33" name="Exceptions/DigitsException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="ea8bc62d6101b8d4af6b4fcd2b1fcd89" name="Exceptions/EachException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="fb5de51195fbd1973c3663d7c3fda8b8" name="Exceptions/EqualsException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="d811e37b91d4ad52b0c3db6d3462206a" name="Exceptions/FloatException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="8594832e050435e5c73e79280c45addc" name="Exceptions/HexaException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="ce6dfb62cdcc171345eabe6cef5fd366" name="Exceptions/InException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="c6367809734bc027c2fd51fbd4653653" name="Exceptions/InstanceException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="3625c35fdff055bcfb63ba5b15aa0c08" name="Exceptions/IntException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="f9066799ff7408038755c422ede9cde5" name="Exceptions/IpException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="10917fb1b09f27bb48390b1538311239" name="Exceptions/KeyException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="b3cb24a88fbac14bf7942a53ee84100a" name="Exceptions/LengthException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="d53024a7f3e05e850e9ec5591f4f4cf8" name="Exceptions/MaxException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="159cf702d687addff38791230d1a0afc" name="Exceptions/MinException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="61678af7b5c5d3b6593a8e74f08d98da" name="Exceptions/MostOfException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="dbdd46e305da7d5a65e17015380bd474" name="Exceptions/NegativeException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="8e72696f3e00c044be35cc3b324548f1" name="Exceptions/NoneOfException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="037674a96816f614f630145dc3d43e93" name="Exceptions/NotEmptyException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="bcc206e96a0dbe7bd03569b20669b2d4" name="Exceptions/NoWhitespaceException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="989d2e511e58cd69d0c20c16a4c6546f" name="Exceptions/NullValueException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="6707081a6d24242408fb7dab382e73d2" name="Exceptions/NumericException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="8ba1174f2e8b9e4152b35206876a539d" name="Exceptions/ObjectException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="2f078aa5cfb3a8b0a7e89e2edbe8d075" name="Exceptions/OneOfException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="9e7a1a64ebf8366f3d2f60ab8e623ec7" name="Exceptions/PositiveException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="aa3eb09ebf08837c75d7d7dd744ecdfc" name="Exceptions/RegexException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="8a6bbc2d9bc72292c12116b7acf54c28" name="Exceptions/SfException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="6b8d7ffcb82edaccbefccbfe44dbc22d" name="Exceptions/StringException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="b1996ee3bc0a331e7cedfaba804cd485" name="Exceptions/ValidationException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="d6bebfa5a114db5f77965c854c190b83" name="Exceptions/ZendException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="07a9f2f27a26a73925aa373b8c04a3f8" name="Exceptions/DateException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="7119dcecdceb9ed9ac3bdf334516c4a9" name="Exceptions/DigitsException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="c0a2d1fd69ee846ae6ef4c2e7383889c" name="Exceptions/EachException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="ec1586c442ad5309d4faf9a7b2c82a30" name="Exceptions/EqualsException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="243467ba8a62d3cea7ecf416bec804a7" name="Exceptions/FloatException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="27e499a1af95b423bc57b756e5de7018" name="Exceptions/HexaException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="c42af138d49917f8cb1fa1409764a507" name="Exceptions/InException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="64442f62034ba5627fc7d245f7562f73" name="Exceptions/InstanceException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="99910e278b930ca3e555ebc9623883ad" name="Exceptions/IntException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="9eec15dce42dc32808f128240866ae6b" name="Exceptions/IpException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="3083a22d5c19531882c59247fe1f7a37" name="Exceptions/KeyException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="b249795559549714b11bb52bdb62196b" name="Exceptions/LengthException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="f71c18822f760a6b046febee31ae5da4" name="Exceptions/MaxException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="48e1d593c726090ef63dc17a10039db4" name="Exceptions/MinException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="9372ddee38174cd9213f19c27f1a6d3a" name="Exceptions/MostOfException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="879bea9838f0d3cdf3cc0f5067a998b5" name="Exceptions/NegativeException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="e64f7fe4e9c7dae2200456b16d5633f6" name="Exceptions/NoneOfException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="3cdcd8d3b700333be64cb2743952606c" name="Exceptions/NotEmptyException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="fd2a795feac8f105bb9c68d1f2017afb" name="Exceptions/NoWhitespaceException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="bafda10030dacfd21705d305bc612508" name="Exceptions/NullValueException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="05291422b8b541ae1dde9441a38ad5f0" name="Exceptions/NumericException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="013a1c3d9b0763ee480022fadca0284f" name="Exceptions/ObjectException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="3173e4afb2da6b88f1f7efdab1ab4451" name="Exceptions/OneOfException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="496b1e0176d0e90bcf5fa44abe5e8084" name="Exceptions/PositiveException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="5f88f980867180b6895accf2bbf56304" name="Exceptions/RegexException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="9a62c0bb8723bed9b9f7cb9f5b10d1d2" name="Exceptions/SfException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="022f47b77de6317e6fff032a75c4cf46" name="Exceptions/StringException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="9a02fd72c628bf3d11f9a9fc4b5e2c5c" name="Exceptions/ValidationException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="ea6baf29fd0d22ae11ffc24fc8b63426" name="Exceptions/ZendException.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="afb715ca150a699600581cf0662e3ea8" name="Rules/AbstractComposite.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="b67df2d035ec4c7894a8d625def11eaa" name="Rules/AbstractRelated.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="ae731c4b8fcc4b2d5e470b8c1faae6dd" name="Rules/AbstractRule.php" role="php" />
@ -106,6 +107,7 @@ First Version
<file baseinstalldir="Respect/Validation" md5sum="668cb6704593d7a9170b71d5715b609d" name="Rules/Sf.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="d3cf890b95664760156f902207242250" name="Rules/String.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="d4b83a1935ed3deea7484f6acba38a2c" name="Rules/Zend.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="0e5c0f6f35661c55e4ceb90e20f4982e" name="ExceptionIterator.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="46726308b13c6de33004cf4f9e7ff510" name="Validatable.php" role="php" />
<file baseinstalldir="Respect/Validation" md5sum="2d08eae5e1809dda0b843ee4d8c37828" name="Validator.php" role="php" />
</dir>
@ -131,7 +133,7 @@ First Version
<release>alpha</release>
<api>alpha</api>
</stability>
<date>2010-12-23</date>
<date>2011-01-30</date>
<license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
<notes>
First Version

View file

@ -160,7 +160,43 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
);
$v->assert(null);
$v->assert(12);
$v->assert(-12.5);
$v->assert(-1.1);
}
}
public function testSomething()
{
$v = Validator::noneOf(
Validator::int()->positive(), //positive integer or;
Validator::float()->negative(), //negative float or;
Validator::nullValue() //null
);
try {
$v->assert(null);
} catch (\Exception $e) {
//echo $e->getFullMessage();
}
}
public function testAbc()
{
//Must have
$v = Validator::allOf(
Validator::attribute('user',
Validator::allOf(
Validator::attribute('screen_name',
Validator::alnum('_')->noWhitespace()->length(1, 15)
),
Validator::attribute('id', Validator::int()->positive())
)
),
Validator::attribute('text', Validator::string()->length(1, 140)),
Validator::attribute('created_at', Validator::date())
);
try {
$v->assert((object) array("user" => (object) array("screen_name" => null), "text" => null));
} catch (\Exception $e) {
echo PHP_EOL . $e->getFullMessage() . PHP_EOL;
}
}
}