Mercurial > pub > Impl
comparison Lib/IMPL/Web/Application/Action.pm @ 63:76b878ad6596
Added serialization support for the IMPL::Object::List
More intelligent Exception message
Fixed encoding support in the actions
Improoved tests
Minor fixes
| author | wizard |
|---|---|
| date | Mon, 15 Mar 2010 02:38:09 +0300 |
| parents | c64bd1bf727d |
| children | 2840c4c85db8 |
comparison
equal
deleted
inserted
replaced
| 62:c64bd1bf727d | 63:76b878ad6596 |
|---|---|
| 1 package IMPL::Web::Application::Action; | 1 package IMPL::Web::Application::Action; |
| 2 use strict; | 2 use strict; |
| 3 | 3 |
| 4 use base qw(IMPL::Object IMPL::Object::Autofill); | 4 use base qw(IMPL::Object IMPL::Object::Autofill); |
| 5 | |
| 6 __PACKAGE__->PassThroughArgs; | |
| 5 | 7 |
| 6 use IMPL::Class::Property; | 8 use IMPL::Class::Property; |
| 7 | 9 |
| 8 BEGIN { | 10 BEGIN { |
| 9 public property application => prop_get | owner_set; | 11 public property application => prop_get | owner_set; |
| 10 public property query => prop_get | owner_set; | 12 public property query => prop_get | owner_set; |
| 11 public property response => prop_get | owner_set; | 13 public property response => prop_get | owner_set; |
| 12 | 14 |
| 13 private property _entryPoint => prop_all; | 15 private property _entryPoint => prop_all; |
| 14 } | 16 } |
| 17 | |
| 18 #todo: make ability to discard old and create new response | |
| 15 | 19 |
| 16 sub Invoke { | 20 sub Invoke { |
| 17 my ($this) = @_; | 21 my ($this) = @_; |
| 18 | 22 |
| 19 if ($this->_entryPoint) { | 23 if ($this->_entryPoint) { |
| 30 | 34 |
| 31 if (ref $handler eq 'CODE') { | 35 if (ref $handler eq 'CODE') { |
| 32 $this->_entryPoint( sub { | 36 $this->_entryPoint( sub { |
| 33 $handler->($this,$delegateNext); | 37 $handler->($this,$delegateNext); |
| 34 } ); | 38 } ); |
| 35 } elsif (UNIVERSAL::isa($handler,'IMPL::Web::Application::QueryHandler')) { | 39 } elsif (ref $handler and UNIVERSAL::isa($handler,'IMPL::Web::QueryHandler')) { |
| 36 $this->_entryPoint( sub { | 40 $this->_entryPoint( sub { |
| 37 $handler->Invoke($this,$delegateNext); | 41 $handler->Invoke($this,$delegateNext); |
| 38 } ); | 42 } ); |
| 39 } elsif ($handler and not ref $handler) { | 43 } elsif ($handler and not ref $handler) { |
| 40 my $method = $this->can($handler) or die new IMPL::InvalidArgumentException("An invalid handler supplied"); | |
| 41 | 44 |
| 42 $this->_entryPoint( sub { | 45 if (my $method = $this->can($handler) ) { |
| 43 $method->($this,$delegateNext); | 46 $this->_entryPoint( sub { |
| 44 } ); | 47 $method->($this,$delegateNext); |
| 48 } ); | |
| 49 } else { | |
| 50 { | |
| 51 no strict 'refs'; | |
| 52 eval "require $handler; 1;" or die new IMPL::InvalidArgumentException("An invalid handler supplied",$handler,"Failed to load module") unless keys %{"${handler}::"}; | |
| 53 } | |
| 54 | |
| 55 if (UNIVERSAL::isa($handler,'IMPL::Web::QueryHandler')) { | |
| 56 $this->_entryPoint( sub { | |
| 57 $handler->Invoke($this,$delegateNext); | |
| 58 } ); | |
| 59 } else { | |
| 60 die new IMPL::InvalidArgumentException("An invalid handler supplied",$handler); | |
| 61 } | |
| 62 } | |
| 45 } else { | 63 } else { |
| 46 die new IMPL::InvalidArgumentException("An invalid handler supplied"); | 64 die new IMPL::InvalidArgumentException("An invalid handler supplied",$handler); |
| 47 } | 65 } |
| 48 | 66 |
| 49 } | 67 } |
| 50 | 68 |
| 51 1; | 69 1; |
