-package Web::Simple::ParamParser;
+package Web::Dispatch::ParamParser;
use strict;
use warnings FATAL => 'all';
sub _parse_param_handler {
my ($self, $spec, $type) = @_;
- require Web::Simple::ParamParser;
- my $unpacker = Web::Simple::ParamParser->can("get_unpacked_${type}_from");
-
for ($_[1]) {
my (@required, @single, %multi, $star, $multistar, %positional, $have_kw);
my %spec;
}
} while (/\G\&/gc) }
- return sub {
- my $raw = $unpacker->($_[0]);
- Web::Dispatch::Predicates::_extract_params($raw, \%spec);
- };
+ return Web::Dispatch::Predicates->can("match_${type}")->(\%spec);
}
}
our @EXPORT = qw(
match_and match_or match_not match_method match_path match_path_strip
- match_extension
+ match_extension match_query match_body
);
sub match_and {
};
}
+sub match_query {
+ my $spec = shift;
+ require Web::Dispatch::ParamParser;
+ sub {
+ _extract_params(
+ Web::Dispatch::ParamParser::get_unpacked_query_from($_[0]),
+ $spec
+ )
+ };
+}
+
+sub match_body {
+ my $spec = shift;
+ require Web::Dispatch::ParamParser;
+ sub {
+ _extract_params(
+ Web::Dispatch::ParamParser::get_unpacked_body_from($_[0]),
+ $spec
+ )
+ };
+}
+
sub _extract_params {
my ($raw, $spec) = @_;
foreach my $name (@{$spec->{required}||[]}) {
use Test::More qw(no_plan);
-use Web::Simple::ParamParser;
+use Web::Dispatch::ParamParser;
my $param_sample = 'foo=bar&baz=quux&foo=%2F';
my $unpacked = {
};
is_deeply(
- Web::Simple::ParamParser::_unpack_params('foo=bar&baz=quux&foo=%2F'),
+ Web::Dispatch::ParamParser::_unpack_params('foo=bar&baz=quux&foo=%2F'),
$unpacked,
'Simple unpack ok'
);
my $env = { 'QUERY_STRING' => $param_sample };
is_deeply(
- Web::Simple::ParamParser::get_unpacked_query_from($env),
+ Web::Dispatch::ParamParser::get_unpacked_query_from($env),
$unpacked,
'Dynamic unpack ok'
);
is_deeply(
- $env->{+Web::Simple::ParamParser::UNPACKED_QUERY},
+ $env->{+Web::Dispatch::ParamParser::UNPACKED_QUERY},
$unpacked,
'Unpack cached ok'
);