Mercurial > pub > Impl
diff Lib/IMPL/Web/Application/Action.pm @ 229:47f77e6409f7
heavily reworked the resource model of the web application:
*some ResourcesContraact functionality moved to Resource
+Added CustomResource
*Corrected action handlers
author | sergey |
---|---|
date | Sat, 29 Sep 2012 02:34:47 +0400 |
parents | c8fe3f84feba |
children | 6d8092d8ce1b |
line wrap: on
line diff
--- a/Lib/IMPL/Web/Application/Action.pm Thu Sep 13 17:55:01 2012 +0400 +++ b/Lib/IMPL/Web/Application/Action.pm Sat Sep 29 02:34:47 2012 +0400 @@ -11,17 +11,12 @@ BEGIN { public property application => prop_get | owner_set; public property query => prop_get | owner_set; - public property response => prop_get | owner_set; - public property responseFactory => prop_get | owner_set; - public property context => prop_get | owner_set; private property _entryPoint => prop_all; } sub CTOR { my ($this) = @_; - $this->responseFactory('IMPL::Web::Application::Response') unless $this->responseFactory; - $this->response( $this->responseFactory->new(query => $this->query) ); $this->context({}); } @@ -35,56 +30,6 @@ } } -sub ReinitResponse { - my ($this) = @_; - - die new IMPL::InvalidOperationException("Response already sent") if $this->response->isHeaderPrinted; - - $this->response->Discard; - $this->response($this->responseFactory->new(query => $this->query)); -} - -sub ChainHandler { - my ($this,$handler) = @_; - - carp "deprecated, use Application->handlers instead"; - - my $delegateNext = $this->_entryPoint(); - - if (ref $handler eq 'CODE') { - $this->_entryPoint( sub { - $handler->($this,$delegateNext); - } ); - } elsif (ref $handler and UNIVERSAL::isa($handler,'IMPL::Web::QueryHandler')) { - $this->_entryPoint( sub { - $handler->Invoke($this,$delegateNext); - } ); - } elsif ($handler and not ref $handler) { - - if (my $method = $this->can($handler) ) { - $this->_entryPoint( sub { - $method->($this,$delegateNext); - } ); - } else { - { - no strict 'refs'; - eval "require $handler; 1;" or die new IMPL::InvalidArgumentException("An invalid handler supplied",$handler,"Failed to load module") unless keys %{"${handler}::"}; - } - - if (UNIVERSAL::isa($handler,'IMPL::Web::QueryHandler')) { - $this->_entryPoint( sub { - $handler->Invoke($this,$delegateNext); - } ); - } else { - die new IMPL::InvalidArgumentException("An invalid handler supplied",$handler); - } - } - } else { - die new IMPL::InvalidArgumentException("An invalid handler supplied",$handler); - } - -} - sub cookie { my ($this,$name,$rx) = @_; @@ -97,6 +42,16 @@ $this->_launder(scalar( $this->query->param($name) ), $rx ); } +sub requestMethod { + my ($this) = @_; + return $this->query->request_method; +} + +sub pathInfo { + my ($this) = @_; + return $this->query->path_info; +} + sub _launder { my ($this,$value,$rx) = @_; @@ -105,13 +60,13 @@ if ( my @result = ($value =~ m/$rx/) ) { return @result > 1 ? \@result : $result[0]; } else { - return undef; + return; } } else { return $value; } } else { - return undef; + return; } } @@ -132,11 +87,12 @@ =head1 MEMBERS -=head2 PROPERTIES +=head2 C<CTOR(%args)> -=over +Инициализирует новый экземпляр. Именованными параметрами передаются значения +свойств. -=item C< [get] application> +=head2 C< [get]application> Экземпляр приложения создавшего текущий объект @@ -144,31 +100,7 @@ Экземпляр C<CGI> запроса -=item C< [get] response > - -Ответ на C<CGI> заспрос C<IMPL::Web::Application::Response> - -=item C< [get] responseFactory > - -Фабрика ответов на запрос, используется для создания нового ответа -либо при конструировании текущего объекта C<IMPL::Web::Application::Action>, -либо при вызове метода C<ReinitResponse> у текущего объекта. - -По умолчанию имеет значение C<IMPL::Web::Application::Response> - =back -=head2 METHODS - -=over - -=item C< ReinitResponse() > - -Отмена старого ответа C<response> и создание вместо него нового. - -Данная операция обычно проводится при обработке ошибок, когда -уже сформированный ответ требуется отменить. Следует заметить, -что эта операция не возможна, если ответ частично или полностью -отправлен клиенту. Тогда возникает исключение C<IMPL::InvalidOperationException>. =cut