=head2 $self->list($c)
+Debug output for Path dispatch points
+
=cut
sub list {
=head2 $self->match( $c, $path )
+Check for paths that match the given path.
+
=cut
sub match {
$path ||= '/';
if ( my $action = $self->{paths}->{$path} ) {
+ return 0 unless $action->match($c);
$c->req->action($path);
$c->req->match($path);
$c->action($action);
=head2 $self->register( $c, $action )
+Call register_path for every path attribute in the given $action.
+
=cut
sub register {
my ( $self, $c, $action ) = @_;
- my $attrs = $action->attributes;
- my @register;
-
- foreach my $r ( @{ $attrs->{Path} || [] } ) {
- unless ($r) {
- $r = $action->namespace;
- $r = '/' unless length $r;
- }
- elsif ( $r !~ m!^/! ) { # It's a relative path
- $r = $action->namespace . "/$r";
- }
- push( @register, $r );
- }
-
- if ( $attrs->{Global} || $attrs->{Absolute} ) {
- push( @register, $action->name ); # Register sub name against root
- }
-
- if ( $attrs->{Local} || $attrs->{Relative} ) {
- push( @register, join( '/', $action->namespace, $action->name ) );
-
- # Register sub name as a relative path
- }
+ my @register = @{ $action->attributes->{Path} || [] };
$self->register_path( $c, $_, $action ) for @register;
+
return 1 if @register;
return 0;
}
=head2 $self->register_path($c, $path, $action)
+register an action at a given path.
+
=cut
sub register_path {
$path =~ s!^/!!;
$path = '/' unless length $path;
$path = URI->new($path)->canonical;
+
$self->{paths}{$path} = $action;
}