use strict;
use warnings;
use lib '.';
use Test::More;
use_ok 'Service', 'Service.pl loads';
my $xml = Service->new('xml', 'xmldata');
use Data::Dumper; print Dumper $xml;
$xml->populate;
is $xml->{template}, 'xmldata', 'XML OK';
my $json = Service->new('json', 'jsondata');
$json->populate;
is $json->{template}, '{"data": jsondata}', 'JSON OK';
done_testing;
####
package Service;
use strict;
use warnings;
use Module::Find;
sub new {
my $class = shift;
my $self = bless {
data => undef,
service => undef,
}, $class;
$self->{data} = shift;
my $service = $self->{data};
my @found = useall 'Service';
for my $plugin (@found) {
if ($plugin =~ /::\Q$service\E$/i) {
$self->{service} = $plugin;
}
last if defined $self->{service};
}
return $self;
}
sub populate {
my $self = shift;
$self->{template} =~ s/[data]/$self->{data}/msi;
# $self->{service}->{template} =~ s/[data]/$self->{data}/msi;
}
1;
####
package Service::XML;
use strict;
use warnings;
use parent 'Service';
sub new {
my $class = shift;
my $self = bless {
template => '[data]',
}, $class;
return $self;
}
1;
####
package Service::JSON;
use strict;
use warnings;
use parent 'Service';
sub new {
my $class = shift;
my $self = bless {
template => '{"data": [data]}',
}, $class;
return $self;
}
1;