Ambrosia
view release on metacpan or search on metacpan
lib/Ambrosia/Validator/Constraint.pm view on Meta::CPAN
package Ambrosia::Validator::Constraint;
use strict;
use warnings;
use Ambrosia::Utils::Util qw(escape_html);
use Ambrosia::Meta;
class sealed
{
public => [qw/name errorMessage/],
private => [qw/constraint/],
};
our $VERSION = 0.010;
sub _init
{
my $self = shift;
$self->SUPER::_init(@_);
$self->errorMessage = [];
$self->constraint = sub() { return (shift(), [], []) };
}
sub check
{
my $self = shift;
my $v;
($v, $self->errorMessage) = $self->constraint->(@_);
return $v;
}
sub error
{
return scalar @{$_[0]->errorMessage};
}
sub Require
{
my $self = shift;
my %p = @_;
unless (exists $p{notUndefined} || exists $p{notEmpty})
{
$p{notUndefined} = 1;
}
my $notUndefined_em = $p{errorMessage} || $self->name . ' not mast be undefined.';
my $notEmpty_em = $p{errorMessage} || $self->name . ' not mast be empty.';
my $prev = $self->constraint;
$self->constraint = sub {
my ($v, $pEM) = $prev->(shift);
if ($p{notUndefined} && not defined $v)
{
push @$pEM, $notUndefined_em;
}
elsif($p{notEmpty} && !$v)
{
push @$pEM, $notEmpty_em;
}
return ($v, $pEM);
};
return $self;
}
sub Boolean
{
my $self = shift;
my %p = @_;
my $notBoolean_em = $p{errorMessage} || $self->name . ' inposible convert to boolean.';
my $prev = $self->constraint;
$self->constraint = sub {
my ($v, $pEM) = $prev->(shift);
( run in 0.976 second using v1.01-cache-2.11-cpan-ff9377addf4 )