comparison 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
comparison
equal deleted inserted replaced
284:f2a6bc5f3184 285:546957c50a36
56 unless $operation; 56 unless $operation;
57 57
58 # в случае, когда один ресурс вызывает HTTP метод другого ресурса, нужно 58 # в случае, когда один ресурс вызывает HTTP метод другого ресурса, нужно
59 # сохранить оригинальный resourceLocation 59 # сохранить оригинальный resourceLocation
60 $action->context->{resourceLocation} ||= $this->location; 60 $action->context->{resourceLocation} ||= $this->location;
61
62 # это свойство специфично только для REST приложений.
63 # сохранение текущего ресурса не повлечет за собой существенных расходов,
64 # т.к. они просто освободятся несколько позже.
65 if(not $action->context->{resource}) {
66 $action->context->{resource} = $this;
67 $action->context->{environment} = sub { $this->PrepareEnvironment() };
68 }
61 69
62 return _InvokeDelegate($operation, $this, $action ); 70 return _InvokeDelegate($operation, $this, $action );
71 }
72
73 sub PrepareEnvironment {
74 my ($this) = @_;
75
76 my @stack;
77 my $env = {};
78
79 for(my $res = $this; $res; $res = $res->parent) {
80 push @stack,$res if $res->can('SetupEnvironment');
81 }
82
83 map $_->SetupEnvironment($env), reverse @stack;
84
85 return $env;
63 } 86 }
64 87
65 # это реализация по умолчанию, базируется информации о ресурсах, содержащийся 88 # это реализация по умолчанию, базируется информации о ресурсах, содержащийся
66 # в контракте. 89 # в контракте.
67 sub FetchChildResource { 90 sub FetchChildResource {