package Router::Simple::SubMapper; use strict; use warnings; use Scalar::Util qw/weaken/; use Router::Simple (); sub new { my ($class, %args) = @_; my $self = bless { %args }, $class; weaken($self->{parent}); $self; } sub connect { my ($self, $pattern, $dest, $opt) = @_; $pattern = $self->{pattern}.$pattern if $self->{pattern}; $dest ||= +{}; $opt ||= +{}; $self->{parent}->connect( $pattern, { %{ $self->{dest} }, %$dest }, { %{ $self->{opt} }, %$opt } ); $self; # chained method } # Allow nested submapper calls sub submapper { my $self = shift; Router::Simple::submapper($self, @_); } 1; __END__ =for stopwords submapper =head1 NAME Router::Simple::SubMapper - submapper =head1 SYNOPSIS use Router::Simple; my $router = Router::Simple->new(); my $s = $router->submapper('/entry/{id}', {controller => 'Entry'}); $s->connect('/edit' => {action => 'edit'}) ->connect('/show' => {action => 'show'}); =head1 DESCRIPTION Router::Simple::SubMapper is sub-mapper for L. This class provides shorthand to create routes, that have common parts. =head1 METHODS =over 4 =item my $submapper = $router->submapper(%args); Do not call this method directly.You should create new instance from $router->submapper(%args). =item $submapper->connect(@args) This method creates new route to parent $router with @args and arguments of ->submapper(). This method returns $submapper itself for method-chain. =item $submapper->submapper(%args) submapper() can be called recursively to build nested routes. This method returns $submapper itself for method-chain. =back =head1 SEE ALSO L