Files:
* lib/Check
* lib/Check/Ping.pm
* lib/Check/Telnet.pm
* lib/Check.pm
* t/AvailCheck.t
## t/AvailCheck.t
use Test::More tests => 2;
BEGIN { use_ok('AvailCheck') };
use Data::Dumper;
my $opt = [
{service => 'ping', server=>'server1'},
{service => 'telnet', server=>'server1'},
{service => 'telnet', server=>'server2'},
{service => 'ping', server=>'server2'},
];
use Check;
my $check_factory = Check->new;
my $check = $check_factory->get_check_object('ping');
isa_ok($check, 'Check::Ping', 'returned Object Check::Ping');
$check->servername('server1');
$check->check;
## lib/Check.pm
package Check;
use Moose;
use Data::Dumper;
has 'servername' => (is => 'rw', isa => 'Str');
my $check_factory = {
'ping' => 'Check::Ping',
'telnet' => 'Check::Telnet',
};
sub get_check_object {
my $self = shift;
my $classname = shift;
my $class = $check_factory->{$classname};
eval "require $class";
return $class->new;
}
1;
## Check/Ping.pm
package Check::Ping;
use Moose;
extends 'Check';
sub check {
my $self = shift;
print "Ping";
}
1;
## Check/Telnet.pm
package Check::Telnet;
use Moose;
extends 'Check';
sub check {
my $self = shift;
print "Telnet\n";
}
1;