# HG changeset patch # User sergey # Date 1350481289 -14400 # Node ID abc7c26bf6159a565eaa66b0944f0d8eab119909 # Parent 23daf2fae33a9dbd6c9c2c4c3b1b048ad16fb8de +Added ObjectFactory for templates with static members support *fixed web-resource model errors diff -r 23daf2fae33a -r abc7c26bf615 Lib/IMPL/Web/Application/CustomResource.pm --- 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, diff -r 23daf2fae33a -r abc7c26bf615 Lib/IMPL/Web/Application/ResourceContract.pm --- 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 => [ diff -r 23daf2fae33a -r abc7c26bf615 Lib/IMPL/Web/Handler/TTView.pm --- 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 => [ diff -r 23daf2fae33a -r abc7c26bf615 Lib/IMPL/Web/View/ObjectFactory.pm --- /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