comparison Lib/IMPL/Web/Application/Action.pm @ 56:117b6956d5a5

Web application in progress
author wizard
date Thu, 04 Mar 2010 15:46:17 +0300
parents 609b59c9f03c
children bf59ee1cd506
comparison
equal deleted inserted replaced
55:609b59c9f03c 56:117b6956d5a5
24 } 24 }
25 25
26 sub ChainHandler { 26 sub ChainHandler {
27 my ($this,$handler) = @_; 27 my ($this,$handler) = @_;
28 28
29 my $delegate;
30
31 my $delegateNext = $this->_entryPoint(); 29 my $delegateNext = $this->_entryPoint();
32 30
33 if (ref $handler eq 'CODE') { 31 if (ref $handler eq 'CODE') {
34 $delegate = sub { 32 $this->_entryPoint( sub {
35 $handler->($this,$delegateNext); 33 $handler->($this,$delegateNext);
36 }; 34 } );
37 } elsif (UNIVERSAL::isa($handler,'IMPL::Web::Application::QueryHandler')) { 35 } elsif (UNIVERSAL::isa($handler,'IMPL::Web::Application::QueryHandler')) {
38 $delegate = sub { 36 $this->_entryPoint( sub {
39 $handler->Invoke($this,$delegateNext); 37 $handler->Invoke($this,$delegateNext);
40 } 38 } );
39 } elsif ($handler and not ref $handler) {
40 my $method = $this->can($handler) or die new IMPL::InvalidArgumentException("An invalid handler supplied");
41
42 $this->_entryPoint( sub {
43 $method->($this,$delegateNext);
44 } );
41 } else { 45 } else {
42 die new IMPL::InvalidArgumentException("An invalid handler supplied"); 46 die new IMPL::InvalidArgumentException("An invalid handler supplied");
43 } 47 }
44 48
45 } 49 }
93 97
94 В данной цепочке также происходит вызов метода, но его результат потом преобразуется 98 В данной цепочке также происходит вызов метода, но его результат потом преобразуется
95 в простые структуры и передается JSON преобразователю. Таким образом модулю логики 99 в простые структуры и передается JSON преобразователю. Таким образом модулю логики
96 не требуется знать о выходном формате, всю работу проделают дополнительные фильтры. 100 не требуется знать о выходном формате, всю работу проделают дополнительные фильтры.
97 101
102 =head1 HANDLERS
103
104 =head2 subroutines
105
106 =over
107
108 =item CODE ref
109
110 Ссылка на процедуру может являться обработчиком, при этом функция будет вызвана с
111 двумя параметрами: ссылкой на action объект, и точкой входа следующего обработчика.
112
113 =item Method Name
114
115 Имя метода, передается в виде строки. У текущего объекта action ищется метод с
116 указанным именем, после чего используется ссылка на этот метод для вызова с двумя
117 параметрами: ссылкой на action объект, и точкой входа следующего обработчика.
118
119 Получается вызов идентичный следующему C<< $action->MethodName($nextHandler) >>;
120
121 =back
122
98 =cut 123 =cut