Acme-Web20-Validator
view release on metacpan or search on metacpan
lib/Acme/Web20/Validator.pm view on Meta::CPAN
#$Id: Validator.pm,v 1.1 2005/11/14 03:39:09 naoya Exp $
package Acme::Web20::Validator;
use strict;
use warnings;
use base qw(Class::Accessor);
use Carp;
use LWP::UserAgent;
use Text::ASCIITable;
use Acme::Web20::Validator::Rule;
our $VERSION = 0.01;
__PACKAGE__->mk_accessors(qw(ua is_validated ok_count));
sub new {
my $class = shift;
my $self = bless {}, $class;
$self->_init(@_);
$self;
}
sub _init {
my $self = shift;
$self->{_rules} = [];
$self->ua(LWP::UserAgent->new);
$self->ua->agent(__PACKAGE__ . "/" . $VERSION);
$self->ok_count(0);
}
sub add_rule {
my $self = shift;
push @{$self->{_rules}}, @_;
}
sub clear {
my $self = shift;
$self->ok_count(0);
$self->is_validated(0);
}
sub set_all_rules {
shift->add_rule(Acme::Web20::Validator::Rule->new->plugins);
}
sub rules_size {
my $self = shift;
return scalar @{$self->{_rules}};
}
sub validate {
my $self = shift;
$self->is_validated and return @{$self->{_rules}};
my $response = $self->_get_remote(@_);
for my $rule (@{$self->{_rules}}) {
unless (ref $rule) {
eval "use $rule";
if ($@) {
warn $@;
next;
}
$rule = $rule->new
}
$rule->validate($response);
$self->ok_count($self->ok_count + 1) if $rule->is_ok;
}
$self->is_validated(1);
return @{$self->{_rules}};
}
sub validation_report {
my $self = shift;
my @rules = $self->is_validated ? @{$self->{_rules}} : $self->validate(@_);
my $t = Text::ASCIITable->new;
$t->setCols('Rule', 'Result');
$t->addRow($_->name, $_->is_ok ? 'Yes!' : 'No') for @rules;
return $t->draw;
}
( run in 1.579 second using v1.01-cache-2.11-cpan-39bf76dae61 )