NAME
Valiant::Validator::Array - Verify items in an arrayref.
SYNOPSIS
package Local::Test::Car;
use Moo;
use Valiant::Validations;
has ['make', 'model', 'year'] => (is=>'ro');
validates make => ( inclusion => [qw/Toyota Tesla Ford/] );
validates model => ( length => [2, 20] );
validates year => ( numericality => { greater_than_or_equal_to => 1960 });
package Local::Test::Array;
use Moo;
use Valiant::Validations;
has status => (is=>'ro');
has name => (is=>'ro');
has car => (is=>'ro');
validates name => (length=>[2,5]);
validates car => ( array => { validations => [object=>1] } );
validates status => (
array => {
max_length => 3,
min_length => 1,
validations => [
inclusion => +{
in => [qw/active retired/],
},
]
},
);
my $car = Local::Test::Car->new(
make => 'Chevy',
model => '1',
year => 1900
);
my $object = Local::Test::Array->new(
name => 'napiorkowski',
status => [qw/active running retired retired aaa bbb ccc active/],
car => [$car],
);
$object->validate->invalid; # TRUE
$object->car->[0]->invalid; # TRUE
# Error Messages
my $all_errors = +{ $object->errors->to_hash(full_messages=>1) };
# $all_errors = {
# car => [
# "Car Is Invalid",
# ],
# "car.0" => [
# "Car Is Invalid",
# ],
# "car.0.make" => [
# "Car Make is not in the list",
# ],
# "car.0.model" => [
# "Car Model is too short (minimum is 2 characters)",
# ],
# "car.0.year" => [
# "Car Year must be greater than or equal to 1960",
# ],
# name => [
# "Name is too long (maximum is 5 characters)",
# ],
# status => [
# "Status Is Invalid",
# ],
# "status.1" => [
# "Status is not in the list",
# ],
# "status.4" => [
# "Status is not in the list",
# ],
# "status.5" => [
# "Status is not in the list",
# ],
# "status.6" => [
# "Status is not in the list",
# ],
# };
# Errors just on the car array item
my $car_errors = +{ $object->car->[0]->errors->to_hash(full_messages=>1) };
# $car_errors = {
# make => [
# "Make is not in the list",
# ],
# model => [
# "Model is too short (minimum is 2 characters)",
# ],
# year => [
# "Year must be greater than or equal to 1960",
# ],
# };
DESCRIPTION
Validations for arrays (really arrayrefs since that's how Moo attrivbutes work). Allows you to define validations on the array as a whole (such as set a maximum or minimum array length) as well as define validations on the array individual items. Can be used with the Valiant::Validator::Object validator to deeply nest arrays of objects.
ATTRIBUTES
This validator defines the following attributes
max_length
The maximum size of the array. For example "@a = (1,2,3)" has size of 3.
min_length
The minimum size of the array.
max_length_err
min_length_err
The errors associated with the minimum or maximum array size errors. Defaults are translatio tag 'max_length_err' and 'min_length_err'.
invalid_msg
The message returned when an array is generically invalid. An array becomes invalid should any validations you define on array items fail to validate. Default is translation tag 'invalid'.
validations
An arrayref of validations that are run on each item in the list. Keep in mind the performance inplications of this should the list be very long.
SHORTCUT FORM
This validator supports the follow shortcut forms:
validates attribute => ( array => [ presence=>1, length=>[2,10] ], ... );
Which is the same as:
validates attribute => (
validations => [
presence => 1,
length => [2,10],
],
);
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