changeset 240:abc7c26bf615

+Added ObjectFactory for templates with static members support *fixed web-resource model errors
author sergey
date Wed, 17 Oct 2012 17:41:29 +0400
parents 23daf2fae33a
children f48a1a9f4fa2
files Lib/IMPL/Web/Application/CustomResource.pm Lib/IMPL/Web/Application/ResourceContract.pm Lib/IMPL/Web/Handler/TTView.pm Lib/IMPL/Web/View/ObjectFactory.pm
diffstat 4 files changed, 34 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/Lib/IMPL/Web/Application/CustomResource.pm	Tue Oct 16 20:14:11 2012 +0400
+++ b/Lib/IMPL/Web/Application/CustomResource.pm	Wed Oct 17 17:41:29 2012 +0400
@@ -24,7 +24,6 @@
 
 sub InitContract {
     my ($self) = @_;
-    
     $self->_contractInstance(
         $self->contractFactory->new(
             resourceFactory => $self,
--- a/Lib/IMPL/Web/Application/ResourceContract.pm	Tue Oct 16 20:14:11 2012 +0400
+++ b/Lib/IMPL/Web/Application/ResourceContract.pm	Wed Oct 17 17:41:29 2012 +0400
@@ -3,10 +3,10 @@
 use IMPL::Const qw(:prop);
 use IMPL::declare {
 	require => {
-		'Exception'            => 'IMPL::Exception',
-		'ArgumentException'    => '-IMPL::ArgumentException',
-		'KeyNotFoundException' => '-IMPL::KeyNotFoundException',
-		'ResourceClass'        => 'IMPL::Web::Application::Resource'
+		Exception            => 'IMPL::Exception',
+		ArgumentException    => '-IMPL::ArgumentException',
+		KeyNotFoundException => '-IMPL::KeyNotFoundException',
+		ResourceClass        => 'IMPL::Web::Application::Resource'
 	  },
 	  base  => [ 'IMPL::Object' => undef ],
 	  props => [
--- a/Lib/IMPL/Web/Handler/TTView.pm	Tue Oct 16 20:14:11 2012 +0400
+++ b/Lib/IMPL/Web/Handler/TTView.pm	Wed Oct 17 17:41:29 2012 +0400
@@ -5,7 +5,7 @@
 use IMPL::Const qw(:prop);
 use IMPL::declare {
     require => {
-        Factory      => 'IMPL::Object::Factory',
+        Factory      => 'IMPL::Web::View::ObjectFactory',
         HttpResponse => 'IMPL::Web::HttpResponse'
       },
       base => [
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/IMPL/Web/View/ObjectFactory.pm	Wed Oct 17 17:41:29 2012 +0400
@@ -0,0 +1,29 @@
+package IMPL::Web::View::ObjectFactory;
+use strict;
+
+our $AUTOLOAD;
+
+use IMPL::declare {
+	require => {
+		Exception => 'IMPL::Exception',
+		OpException => '-IMPL::InvalidOperationException'
+	},
+	base =>[
+	   'IMPL::Object::Factory' => '@_'
+	]
+};
+
+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("Method '$method' isn't found in '$target'")
+	}
+}
+
+1;
\ No newline at end of file