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; =head1 NAME HTML::Widget::Constraint - Constraint Base Class =head1 SYNOPSIS my $c = $widget->constraint( $type, @names ); $c->message('Validation error.'); $c->names(@names); $c->not(1); =head1 DESCRIPTION Constraint Base Class. =head1 METHODS =head2 default_message Arguments: $message Return Value: $message Default error message for failing constraints. =cut sub default_message {'Invalid Input'} =head2 init Arguments: $widget Called once when process() gets called for the first time. =cut sub init { } =head2 javascript Arguments: $id Should return JavaScript for client side validation and the like. =cut sub javascript { } =head2 msg =head2 message Arguments: $message Contains the validation error message. =head2 mk_message Arguments: $message Returns a validation error message. =cut sub mk_message { return $_[0]->message || $_[0]->default_message } =head2 names Arguments: @names Return Value: @names Contains names of params to test. =head2 not Arguments: $bool Return Value: $bool Negate constraint. =head2 prepare Arguments: $widget Called every time process() gets called. =cut sub prepare { } =head2 process Arguments: $widget, $params, \@uploads Return Value: \@errors Validates params and returns a arrayref containing L objects representing failed constraints. =cut 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; } =head2 process_js Arguments: $id Returns a hashref containing JavaScripts for client side validation and the like. =cut sub process_js { my ( $self, $id ) = @_; my %js; for my $name ( @{ $self->names } ) { $js{$name} = $self->javascript("$id\_$name"); } return \%js; } =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 Arguments: $value Return Value: $bool Validates a value and returns 1 or 0. =cut sub validate {1} =head1 AUTHOR Sebastian Riedel, 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;