HTML::Widget::Constraint - Constraint Base Class


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

Index


Code Index:

NAME

Top

HTML::Widget::Constraint - Constraint Base Class

SYNOPSIS

Top

    my $c = $widget->constraint( $type, @names );
    $c->message('Validation error.');
    $c->names(@names);
    $c->not(1);

DESCRIPTION

Top

Constraint Base Class.

METHODS

Top

default_message

Arguments: $message

Return Value: $message

Default error message for failing constraints.

init

Arguments: $widget

Called once when process() gets called for the first time.

javascript

Arguments: $id

Should return JavaScript for client side validation and the like.

msg

message

Arguments: $message

Contains the validation error message.

mk_message

Arguments: $message

Returns a validation error message.

names

Arguments: @names

Return Value: @names

Contains names of params to test.

not

Arguments: $bool

Return Value: $bool

Negate constraint.

prepare

Arguments: $widget

Called every time process() gets called.

process

Arguments: $widget, $params, \@uploads

Return Value: \@errors

Validates params and returns a arrayref containing HTML::Widget::Error objects representing failed constraints.

process_js

Arguments: $id

Returns a hashref containing JavaScripts for client side validation and the like.

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

Arguments: $value

Return Value: $bool

Validates a value and returns 1 or 0.

AUTHOR

Top

Sebastian Riedel, sri@oook.de

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;

use warnings;
use strict;
use base 'Class::Accessor::Chained::Fast';
use HTML::Widget::Error;

__PACKAGE__->mk_accessors(qw/message names not render_errors/);

*msg = \&message;

sub default_message {'Invalid Input'}

sub init { }

sub javascript { }

sub mk_message { return $_[0]->message || $_[0]->default_message }

sub prepare { }

sub process {
    my ( $self, $w, $params ) = @_;

    my $results = [];

    for my $name ( @{ $self->names } ) {
        my $values = $params->{$name};
        my @values = ref $values eq 'ARRAY' ? @$values : ($values);
        for my $value (@values) {
            my $result = $self->validate($value);
            push @$results,
                HTML::Widget::Error->new(
                { name => $name, message => $self->mk_message } )
                if $self->not ? $result : !$result;
        }
    }

    return $results;
}

sub process_js {
    my ( $self, $id ) = @_;
    my %js;
    for my $name ( @{ $self->names } ) {
        $js{$name} = $self->javascript("$id\_$name");
    }
    return \%js;
}

sub validate {1}

1;