NAME

Valiant::Validator::Numericality - Validate numeric attributes

SYNOPSIS

    package Local::Test::Numericality;

    use Moo;
    use Valiant::Validations;

    has age => (is => 'ro');
    has equals => (is => 'ro', default => 33);

    validates age => (
      numericality => {
        only_integer => 1,
        less_than => 200,
        less_than_or_equal_to => 199,
        greater_than => 10,
        greater_than_or_equal_to => 9,
        equal_to => \&equals,
      },
    );

    validates equals => (numericality => [5, 100]);

    my $object = Local::Test::Numericality->new(age=>8, equal=>40);
    $object->validate;

    warn $object->errors->_dump;

    $VAR1 = {
      age => [
        "Age must be equal to 40",
        "Age must be greater than 10",
        "Age must be greater than or equal to 9",
      ],
    };

DESCRIPTION

Validates that your attributes have only numeric values. By default, it will match an optional sign followed by an integral or floating point number. To specify that only integral numbers are allowed set only_integer to true.

There's several parameters you can set to place different type of numeric limits on the value. There's no checks on creating non sense rules (you can set a greater_than of 10 and a less_than of 5, for example) so pay attention.

All parameter values can be either a constant or a coderef (which will get $self as as argument). The coderef option exists to make it easier to write dynamic checks without resorting to writing your own custom validators. Each value also defines a translation tag which folows the pattern "${rule}_err" (for example the greater_than rules has a translation tag greater_than_err). You can use the message parameter to set a custom message (either a string value or a translation tag).

CONSTRAINTS

Besides an overall test for either floating point or integer numericality this validator supports the following constraints:

only_integer

When set to a true value will require the value to be some sort of integer. If you set this to 1 then the value must be generally an integer. However you can also set it to the following to get more limited integer types:

    validates attribute => ( numericality => { only_integer => 'positive_integer' }, ... );
    validates attribute => ( numericality => { only_integer => 'negative_integer' }, ... );

    # Lets you require the integer to conform to Postgresql Serial or Bigserial types
    validates attribute => ( numericality => { only_integer => 'pg_serial' }, ... );
    validates attribute => ( numericality => { only_integer => 'pg_bigserial' }, ... );
greater_than

Accepts numeric value or coderef. Returns error message tag greater_than if the attribute value isn't greater.

greater_than_or_equal_to

Accepts numeric value or coderef. Returns error message tag greater_than_or_equal_to_err if the attribute value isn't equal or greater.

equal_to

Accepts numeric value or coderef. Returns error message tag equal_to_err if the attribute value isn't equal.

other_than

Accepts numeric value or coderef. Returns error message tag other_than_err if the attribute value isn't different.

less_than

Accepts numeric value or coderef. Returns error message tag less_than_err if the attribute value isn't less than.

less_than_or_equal_to

Accepts numeric value or coderef. Returns error message tag less_than_or_equal_to_err if the attribute value isn't less than or equal.

between

Accepts a two item arrayref, where the first is an inclusive lower number bound and the second is an inclusive upper number bound.

even

Accepts numeric value or coderef. Returns error message tag even_err if the attribute value isn't an even number.

odd

Accepts numeric value or coderef. Returns error message tag odd_err if the attribute value isn't an odd number.

divisible_by

Accepts numeric value or coderef. Returns error message divisible_by_err if the attribute value is not evenly divisible by the value. For example if the attribute value is 15 and the divisible value is 5 that is true (its divisible) but of the divisible value was 4 that woule be false and generate an error message.

decimals

Accepts numeric value or coderef. Returns error message tag decimals_err if the attribute value doesn't contain exactly the requird number of places after the decimal point.

positive

A number greater or equal to zero

negative

A number less than zero

SHORTCUT FORM

This validator supports the follow shortcut forms:

    validates attribute => ( numericality => [1,10], ... );

Which is the same as:

    validates attribute => (
      numericality => {
        greater_than_or_equal_to => 1,
        less_than_or_equal_to => 10,
      },
    );

If you merely wish to test for overall numericality you can use:

    validates attribute => ( numericality => +{}, ... );

You can require various integer types as well:

    validates attribute => ( numericality => 'integer', ... );
    validates attribute => ( numericality => 'positive_integer', ... );
    validates attribute => ( numericality => 'negative_integer' ... );
    validates attribute => ( numericality => 'pg_serial' ... ); # Postgresql Serial
    validates attribute => ( numericality => 'pg_bigserial' ... ); # Postgresql Bigserial

Misc shortcuts:

    validates attribute => ( numericality => 'positive' ... ); # a positive number
    validates attribute => ( numericality => 'negative' ... ); # a negative number
    validates attribute => ( numericality => 'even' ... ); # an even number
    validates attribute => ( numericality => 'odd' ... ); # an odd number

 

GLOBAL PARAMETERS

This validator supports all the standard shared parameters: if, unless, message, strict, allow_undef, allow_blank.

SEE ALSO

Valiant, Valiant::Validator, Valiant::Validator::Each.

AUTHOR

See Valiant

COPYRIGHT & LICENSE

See Valiant

9 POD Errors

The following errors were encountered while parsing the POD:

Around line 244:

Deleting unknown formatting code V<>

Around line 249:

Deleting unknown formatting code V<>

Around line 254:

Deleting unknown formatting code V<>

Around line 259:

Deleting unknown formatting code V<>

Around line 264:

Deleting unknown formatting code V<>

Around line 269:

Deleting unknown formatting code V<>

Around line 279:

Deleting unknown formatting code V<>

Around line 284:

Deleting unknown formatting code V<>

Around line 296:

Deleting unknown formatting code V<>