diff lib/IMPL/Web/View/ObjectFactory.pm @ 407:c6e90e02dd17 ref20150831

renamed Lib->lib
author cin
date Fri, 04 Sep 2015 19:40:23 +0300
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/IMPL/Web/View/ObjectFactory.pm	Fri Sep 04 19:40:23 2015 +0300
@@ -0,0 +1,33 @@
+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;
\ No newline at end of file