1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
# ABSTRACT: Validation Directive for Validation Class Field Definitions
package Validation::Class::Directive::Validation;
use strict;
use warnings;
use base 'Validation::Class::Directive';
use Validation::Class::Util;
our $VERSION = '7.900057'; # VERSION
has 'mixin' => 0;
has 'field' => 1;
has 'multi' => 0;
has 'message' => '%s could not be validated';
# ensure most core directives execute before this one
has 'dependencies' => sub {{
normalization => [],
validation => [qw(
alias
between
default
depends_on
error
errors
filtering
filters
label
length
matches
max_alpha
max_digits
max_length
max_sum
min_alpha
min_digits
min_length
min_sum
mixin
mixin_field
multiples
name
options
pattern
readonly
required
toggle
value
)]
}};
sub validate {
my $self = shift;
my ($proto, $field, $param) = @_;
if (defined $field->{validation} && defined $param) {
my $context = $proto->stash->{'validation.context'};
my $count = ($proto->errors->count+$field->errors->count);
my $failed = !$field->validation->($context,$field,$proto->params)?1:0;
my $errors = ($proto->errors->count+$field->errors->count)>$count ?1:0;
# error handling; did the validation routine pass or fail?
# validation passed with no errors
if (!$failed && !$errors) {
# noop
}
# validation failed with no errors
elsif ($failed && !$errors) {
$self->error(@_);
}
# validation passed with errors
elsif (!$failed && $errors) {
# noop -- but acknowledge errors have been set
}
# validation failed with errors
elsif ($failed && $errors) {
# assume errors have been set from inside the validation routine
}
}
return $self;
}
1;
__END__
=pod
=head1 NAME
Validation::Class::Directive::Validation - Validation Directive for Validation Class Field Definitions
=head1 VERSION
version 7.900057
=head1 SYNOPSIS
use Validation::Class::Simple;
my $rules = Validation::Class::Simple->new(
fields => {
example_data => {
validation => sub {
my ($self, $proto, $field, $params) = @_;
# user-defined validation should return true/false
}
}
}
);
# set parameters to be validated
$rules->params->add($parameters);
# validate
unless ($rules->validate) {
# handle the failures
}
=head1 DESCRIPTION
Validation::Class::Directive::Validation is a core validation class field
directive that is used to execute user-defined validation routines. This
directive always takes a sub-routine and should return true or false.
=head1 AUTHOR
Al Newkirk <anewkirk@ana.io>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2011 by Al Newkirk.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
|