Router-Dumb
view release on metacpan or search on metacpan
lib/Router/Dumb.pm view on Meta::CPAN
confess "path didn't start with /" unless $str =~ s{^/}{};
if (my $route = $self->_route_at($str)) {
# should always match! -- rjbs, 2011-07-13
confess "empty route didn't match empty path"
unless my $match = $route->check($str);
return $match;
}
my @parts = split m{/}, $str;
for my $candidate ($self->ordered_routes(
sub {
($_->part_count == @parts and $_->has_params)
or ($_->part_count <= @parts and $_->is_slurpy)
}
)) {
next unless my $match = $candidate->check($str);
return $match;
}
lib/Router/Dumb/Helper/FileMapper.pm view on Meta::CPAN
my $add_method = $arg->{ignore_conflicts}
? 'add_route_unless_exists'
: 'add_route';
for my $file (@files) {
my $path = $file =~ s{/INDEX$}{/}gr;
$path =~ s{$dir}{};
$path =~ s{^/}{};
my @parts = split m{/}, $path;
confess "can't use placeholder-like name in route files"
if grep {; /^:/ } @parts;
confess "can't use asterisk in file names" if grep {; $_ eq '*' } @parts;
my $route = Router::Dumb::Route->new({
parts => $self->_parts_munger->( $self, \@parts ),
target => $self->_target_munger->( $self, $file ),
});
lib/Router/Dumb/Helper/RouteFile.pm view on Meta::CPAN
if ($line =~ /^\s/) {
confess "indented line found out of context of a route" unless $curr;
confess "couldn't understand line <$line>"
unless my ($name, $type) = $line =~ /\A\s+(\S+)\s+isa\s+(\S+)\s*\z/;
$curr->{constraints}->{$name} = find_type_constraint($type);
} else {
my ($path, $target) = split /\s*=>\s*/, $line;
s{^/}{} for $path, $target;
my @parts = split m{/}, $path;
$curr = {
parts => \@parts,
target => $target,
};
}
if ($curr and ($i == $#lines or $lines[ $i + 1 ] =~ /^\S/)) {
$router->$add_method( Router::Dumb::Route->new($curr) );
undef $curr;
lib/Router/Dumb/Route.pm view on Meta::CPAN
#pod
#pod =cut
sub check {
my ($self, $str) = @_;
return $self->_match if $str eq join(q{/}, $self->parts);
my %matches;
my @in_parts = split m{/}, $str;
my @my_parts = $self->parts;
PART: for my $i (keys @my_parts) {
my $my_part = $my_parts[ $i ];
if ($my_part ne '*' and $my_part !~ /^:/) {
return unless $my_part eq $in_parts[$i];
next PART;
}
( run in 0.673 second using v1.01-cache-2.11-cpan-71847e10f99 )