view lib/IMPL/Web/View/ObjectFactory.pm @ 410:9335cf010b23 ref20150831

refactoring
author cin
date Mon, 14 Sep 2015 01:11:53 +0300
parents c6e90e02dd17
children
line wrap: on
line source

package IMPL::Web::View::ObjectFactory;
use strict;

our $AUTOLOAD;

use IMPL::declare {
	require => {
		Exception => 'IMPL::Exception',
		OpException => '-IMPL::InvalidOperationException'
	},
	base =>[
	   'IMPL::Object::Factory' => '@_'
	]
};

use IMPL::Resources::Strings {
    MsgNoMethod => 'Method "%method%" isn\'t found in "%target%"'
};

sub AUTOLOAD {
	my $this = shift;
	my ($method) = ($AUTOLOAD =~ m/(\w+)$/);
	
	return if $method eq 'DESTROY';
	my $target = $this->factory; 
	if ( $target->can($method) ) {
	   	return $target->$method(@_);
	} else {
	   die OpException->new( MsgNoMethod( method => $method, target => $target ) );
	}
}

1;