X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FController.pm;h=5902597e231cdf1236e02ff73ea3efbf038eaf04;hb=e9f1c159da06d12087ea77c429197c3d9b8e3c11;hp=85ffb38d4e8c4ce53e295087ee0f2cae14061fc2;hpb=eb270c30772dd578741727a78b9deb5fb4f72905;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Controller.pm b/lib/Catalyst/Controller.pm index 85ffb38..5902597 100644 --- a/lib/Catalyst/Controller.pm +++ b/lib/Catalyst/Controller.pm @@ -285,9 +285,11 @@ sub _parse_Chained_attr { if (defined($value) && length($value)) { if ($value eq '.') { $value = '/'.$self->action_namespace($c); - } elsif (my ($rest) = $value =~ /^\.{2}\/(.*)$/) { + } elsif (my ($rel, $rest) = $value =~ /^((?:\.{2}\/)+)(.*)$/) { my @parts = split '/', $self->action_namespace($c); - $value = '/'.join('/', @parts[0 .. $#parts-1], $rest); + my @levels = split '/', $rel; + + $value = '/'.join('/', @parts[0 .. $#parts - @levels], $rest); } elsif ($value !~ m/^\//) { my $action_ns = $self->action_namespace($c); @@ -304,6 +306,11 @@ sub _parse_Chained_attr { return Chained => $value; } +sub _parse_ChainedParent_attr { + my ($self, $c, $name, $value) = @_; + return $self->_parse_Chained_attr($c, $name, '../'.$name); +} + sub _parse_PathPrefix_attr { my $self = shift; return PathPart => $self->path_prefix;