HTML::Widget::Constraint::CallbackOnce - CallbackOnce Constraint


HTML-Widget documentation Contained in the HTML-Widget distribution.

Index


Code Index:

NAME

Top

HTML::Widget::Constraint::CallbackOnce - CallbackOnce Constraint

SYNOPSIS

Top

    my $c = $widget->constraint( 'CallbackOnce', 'foo', 'bar' )->callback(
      sub { 
        my ($foo, $bar) = @_;
        return 1 if $foo == $bar * 2;
    });

DESCRIPTION

Top

A callback constraint which will only be run once for each call of "process" in HTML::Widget.

METHODS

Top

callback

cb

Arguments: \&callback

Requires a subroutine reference used for validation, which will be passed a list of values corresponding to the constraint names.

cb is provided as an alias to callback.

process

Overrides "process" in HTML::Widget::Constraint to ensure validate is only called once for each call of validate.

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.

validate

perform the actual validation.

AUTHOR

Top

Carl Franks cfranks@cpan.org

LICENSE

Top

This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.


HTML-Widget documentation Contained in the HTML-Widget distribution.
package HTML::Widget::Constraint::CallbackOnce;

use warnings;
use strict;
use base 'HTML::Widget::Constraint';

__PACKAGE__->mk_accessors(qw/callback/);

*cb = \&callback;

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;
}

sub validate {
    my ( $self, @values ) = @_;

    my $callback = $self->callback || sub {1};

    return $callback->(@values);
}

1;