match_extension match_query match_body match_uploads
);
+sub _generate_proxy { bless shift, 'Web::Dispatch::Matcher' }
+
sub match_and {
my @match = @_;
- sub {
+ _generate_proxy(sub {
my ($env) = @_;
my $my_env = { 'Web::Dispatch.original_env' => $env, %$env };
my $new_env;
}
}
return ($new_env, @got);
- }
+ })
}
sub match_or {
my @match = @_;
- sub {
+ _generate_proxy(sub {
foreach my $try (@match) {
if (my @ret = $try->(@_)) {
return @ret;
}
}
return;
- }
+ })
}
sub match_not {
my ($match) = @_;
- sub {
+ _generate_proxy(sub {
if (my @discard = $match->($_[0])) {
();
} else {
({});
}
- }
+ })
}
sub match_method {
my ($method) = @_;
- sub {
+ _generate_proxy(sub {
my ($env) = @_;
$env->{REQUEST_METHOD} eq $method ? {} : ()
- }
+ })
}
sub match_path {
my ($re) = @_;
- sub {
+ _generate_proxy(sub {
my ($env) = @_;
if (my @cap = ($env->{PATH_INFO} =~ /$re/)) {
$cap[0] = {}; return @cap;
}
return;
- }
+ })
}
sub match_path_strip {
my ($re) = @_;
- sub {
+ _generate_proxy(sub {
my ($env) = @_;
if (my @cap = ($env->{PATH_INFO} =~ /$re/)) {
$cap[0] = {
return @cap;
}
return;
- }
+ })
}
sub match_extension {
my $re = $wild
? qr/\.(\w+)$/
: qr/\.(\Q${extension}\E)$/;
- sub {
+ _generate_proxy(sub {
if ($_[0]->{PATH_INFO} =~ $re) {
($wild ? ({}, $1) : {});
} else {
();
}
- };
+ });
}
sub match_query {
- _param_matcher(query => $_[0]);
+ _generate_proxy(_param_matcher(query => $_[0]));
}
sub match_body {
- _param_matcher(body => $_[0]);
+ _generate_proxy(_param_matcher(body => $_[0]));
}
sub match_uploads {
- _param_matcher(uploads => $_[0]);
+ _generate_proxy(_param_matcher(uploads => $_[0]));
}
sub _param_matcher {