Skip to content

Commit

Permalink
do not attempt to render parent routes without a pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Aug 16, 2014
1 parent 6b1b53a commit 047c226
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 7 deletions.
1 change: 1 addition & 0 deletions Changes
@@ -1,6 +1,7 @@

5.30 2014-08-17
- Improved Mojo::URL performance.
- Improved url_for performance slightly.
- Fixed Mojo::IOLoop::Client to use a timeout for every connection.

5.29 2014-08-16
Expand Down
4 changes: 2 additions & 2 deletions lib/Mojolicious/Routes/Pattern.pm
Expand Up @@ -269,8 +269,8 @@ Compiled regular expression for format matching.
=head2 pattern
my $pattern = $pattern->pattern;
$pattern = $pattern->pattern('/(foo)/(bar)');
my $raw = $pattern->pattern;
$pattern = $pattern->pattern('/(foo)/(bar)');
Raw unparsed pattern.
Expand Down
12 changes: 7 additions & 5 deletions lib/Mojolicious/Routes/Route.pm
Expand Up @@ -123,13 +123,15 @@ sub remove {
sub render {
my ($self, $path, $values) = @_;

# Render pattern
my $prefix = $self->pattern->render($values, !$path);
$path = "$prefix$path" unless $prefix eq '/';
$path ||= '/' unless my $parent = $self->parent;
# Render pattern (if necessary)
if (defined((my $pattern = $self->pattern)->pattern) || !$path) {
my $prefix = $pattern->render($values, !$path);
$path = "$prefix$path" unless $prefix eq '/';
}

# Let parent render
return $parent ? $parent->render($path, $values) : $path;
return $path || '/' unless my $parent = $self->parent;
return $parent->render($path, $values);
}

sub root {
Expand Down
1 change: 1 addition & 0 deletions t/mojolicious/pattern.t
Expand Up @@ -55,6 +55,7 @@ is $pattern->render({a => 'c', b => 'd'}), '/test/c/123/d/456', 'right result';

# Root
$pattern = Mojolicious::Routes::Pattern->new('/');
is $pattern->pattern, undef, 'slash has been optimized away';
$pattern->defaults({action => 'index'});
ok !$pattern->match('/test/foo/bar'), 'no result';
is_deeply $pattern->match('/'), {action => 'index'}, 'right structure';
Expand Down

0 comments on commit 047c226

Please sign in to comment.