package HTML::Widget::Constraint::CallbackOnce;
use warnings;
use strict;
use base 'HTML::Widget::Constraint';
__PACKAGE__->mk_accessors(qw/callback/);
*cb = \&callback;
=head1 NAME
HTML::Widget::Constraint::CallbackOnce - CallbackOnce Constraint
=head1 SYNOPSIS
my $c = $widget->constraint( 'CallbackOnce', 'foo', 'bar' )->callback(
sub {
my ($foo, $bar) = @_;
return 1 if $foo == $bar * 2;
});
=head1 DESCRIPTION
A callback constraint which will only be run once for each call of
L.
=head1 METHODS
=head2 callback
=head2 cb
Arguments: \&callback
Requires a subroutine reference used for validation, which will be passed
a list of values corresponding to the constraint names.
L is provided as an alias to L.
=head2 process
Overrides L to ensure L is
only called once for each call of L.
=cut
sub process {
my ( $self, $w, $params ) = @_;
my @names = @{ $self->names };
my @values = map { $params->{$_} } @names;
my $result = $self->validate(@values);
my $results = [];
if ( $self->not ? $result : !$result ) {
for my $name (@names) {
push @$results, HTML::Widget::Error->new(
{ name => $name, message => $self->mk_message } );
}
}
return $results;
}
=head2 render_errors
Arguments: @names
A list of element names for which an error should be displayed.
If this is not set, the default behaviour is for the error to be displayed
for all of the Constraint's named elements.
=head2 validate
perform the actual validation.
=cut
sub validate {
my ( $self, @values ) = @_;
my $callback = $self->callback || sub {1};
return $callback->(@values);
}
=head1 AUTHOR
Carl Franks C
=head1 LICENSE
This library is free software, you can redistribute it and/or modify it under
the same terms as Perl itself.
=cut
1;