return $o->{'param'}->{$method};
####
package Input::SignUp;
our @ISA = qw/Input/;
use strict;
use warnings;
sub _init {
$_[0]->make_methods(
'user' => [ qr/^[a-zA-Z0-9]+$/, 'Username may only contain alphanumeric characters' ],
'password' => [ qr/^[a-zA-Z0-9]+$/, 'Password may only contain alphanumeric characters' ],
'key' => [ qr/^[a-fA-F0-9]+$/, 'Key may only contain A-F alphanumeric characters' ],
);
}
1;
####
package Input;
use strict;
use warnings;
use Want;
sub new {
my $self = bless {}, shift;
$self->{'params'} = Parameters->new;
$self->_init;
$self;
}
sub make_methods {
$self = shift;
my %methods = @_;
for (keys %methods) {
my($p,$re,$error) = $methods{$_};
$self->{'regex'}->{$p} = $re;
$self->{'error'}->{$p} = $error;
}
}
sub validate {
$self = shift;
my %input = @_;
$self->{'params'}->{$_} = $self->_validate($input{$_},$_}) for keys %input;
}
sub _validate {
$_[1] =~ $_[0]->{'regex'}->{$_[2]} or $_[0]->error($_[2],$_[0]->{'error'}->{$_[2]});
$1;
}
sub error {
my $self = shift;
push @{$self->{'errors'}}, [ @_ ] and return 1 if scalar @_ == 2;
return scalar @{$self->{'errors'}};
}
sub error_hash {
my @loop_data;
for (@{$self->{'errors'}}) {
push(@loop_data, { 'ERROR' => ucfirst $_->[0].' Error: '.$_->[1] } )
for @{$self->{'errors'} };
}
return ( 'ERRORS' => \@loop_data );
}
sub parameters {
my $self = shift;
return bless [], if want('OBJECT'); # Single Param.
# This is where I'm stuck. Ideally, the object would be called
# as $o->parameters->user('Bob'), or something like that. Then
# We'd validate the parameter, using the key 'user'. It's rather
# simple to do, by just changing parameters->user to parameters->('user','bob'),
# but I don't want that!
}
1;