Mercurial > pub > Impl
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 |