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