Mercurial > pub > Impl
diff Lib/IMPL/Web/Application/Resource.pm @ 285:546957c50a36
*IMPL::Web::Handler::TTView Reworked template selection mechanism
*IMPL::Web::Application: refactoring
-Removed obsolete IMPL::Text modules
author | cin |
---|---|
date | Mon, 18 Feb 2013 02:55:59 +0400 |
parents | 4abda21186cd |
children | fe725fad2d90 |
line wrap: on
line diff
--- a/Lib/IMPL/Web/Application/Resource.pm Thu Feb 14 19:14:02 2013 +0400 +++ b/Lib/IMPL/Web/Application/Resource.pm Mon Feb 18 02:55:59 2013 +0400 @@ -58,10 +58,33 @@ # в случае, когда один ресурс вызывает HTTP метод другого ресурса, нужно # сохранить оригинальный resourceLocation $action->context->{resourceLocation} ||= $this->location; + + # это свойство специфично только для REST приложений. + # сохранение текущего ресурса не повлечет за собой существенных расходов, + # т.к. они просто освободятся несколько позже. + if(not $action->context->{resource}) { + $action->context->{resource} = $this; + $action->context->{environment} = sub { $this->PrepareEnvironment() }; + } return _InvokeDelegate($operation, $this, $action ); } +sub PrepareEnvironment { + my ($this) = @_; + + my @stack; + my $env = {}; + + for(my $res = $this; $res; $res = $res->parent) { + push @stack,$res if $res->can('SetupEnvironment'); + } + + map $_->SetupEnvironment($env), reverse @stack; + + return $env; +} + # это реализация по умолчанию, базируется информации о ресурсах, содержащийся # в контракте. sub FetchChildResource {