Revision 3 (by ahitrov@rambler.ru, 2010/03/24 15:19:32) |
The CORE
|
package Contenido::MVC::DispatchType::Path;
use strict;
use base 'Contenido::MVC::DispatchType';
use URI;
use Data::Dumper;
sub match {
my $self = shift;
my $path = shift || '/';
if (exists $self->{paths}->{$path}) {
return {
'sub' => $self->{paths}->{$path}->{'sub'},
'path' => $path,
'controller_class' => $self->{paths}->{$path}->{'controller_class'},
'snippets' => [],
(exists $self->{paths}->{$path}->{'begin'} ? ('begin' => $self->{paths}->{$path}->{'begin'}) : ()),
(exists $self->{paths}->{$path}->{'end'} ? ('end' => $self->{paths}->{$path}->{'end'}) : ()),
};
}
return undef;
}
sub register {
my $self = shift;
my $action = shift;
return undef unless $action && ref($action) eq 'HASH';
my $path = $action->{'path'};
$path = '/' unless length $path;
$path = URI->new($path)->canonical();
$self->{paths}->{$path} = {
'sub' => $action->{'sub'},
'controller_class' => $action->{'controller_class'},
(exists $action->{'begin'} ? ('begin' => $action->{'begin'}) : ()),
(exists $action->{'end'} ? ('end' => $action->{'end'}) : ()),
};
return 1;
}
1;