package RWDE::AbstractFactory;
use strict;
use warnings;
use Error qw(:try);
use RWDE::Exceptions;
use vars qw($VERSION);
$VERSION = sprintf "%d", q$Revision: 506 $ =~ /(\d+)/;
=pod
=head1 RWDE::AbstractFactory
Abstract Factory, instantiates and returns any App object
=cut
=head2 instantiate
Instantiate an instance of the class specified in the parameter
Requires class parameter
=cut
sub instantiate {
my ($self, $params) = @_;
throw RWDE::DevelException({ info => 'AbstractFactory::Parameter error - class not specified' }) unless ($$params{'class'});
my $proto = $$params{class};
my $requested_type = ref $proto || $proto;
delete $$params{class};
my $library = $requested_type . '.pm';
$library =~ s/::/\//g;
require $library;
return $requested_type->new($params);
}
1;