From: Robert Sedlacek Date: Sun, 15 Jul 2012 21:47:43 +0000 (+0200) Subject: allow parameter names to contain dots X-Git-Tag: v0.018~4 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FWeb-Simple.git;a=commitdiff_plain;h=0cddee7656b75b899156498665f46d3cf0eadc16 allow parameter names to contain dots --- diff --git a/lib/Web/Dispatch/Parser.pm b/lib/Web/Dispatch/Parser.pm index 6c2cea6..c9a2657 100644 --- a/lib/Web/Dispatch/Parser.pm +++ b/lib/Web/Dispatch/Parser.pm @@ -249,7 +249,7 @@ sub _parse_param_handler { # @foo= or foo= or @foo~ or foo~ - /\G(\w+)/gc or $self->_blam('Expected parameter name'); + /\G([\w.]*)/gc or $self->_blam('Expected parameter name'); my $name = $1; diff --git a/t/dispatch_parser.t b/t/dispatch_parser.t index 7b1632b..b63dac2 100644 --- a/t/dispatch_parser.t +++ b/t/dispatch_parser.t @@ -393,6 +393,7 @@ my $dp = Web::Dispatch::Parser->new; # my $q = 'foo=FOO&bar=BAR1&baz=one+two&quux=QUUX1&quux=QUUX2' + .'&foo.bar=FOOBAR1&foo.bar=FOOBAR2&foo.baz=FOOBAZ' .'&bar=BAR2&quux=QUUX3&evil=%2F'; my %all_single = ( @@ -401,6 +402,8 @@ my %all_single = ( baz => 'one two', quux => 'QUUX3', evil => '/', + 'foo.baz' => 'FOOBAZ', + 'foo.bar' => 'FOOBAR2', ); my %all_multi = ( @@ -409,6 +412,8 @@ my %all_multi = ( baz => [ 'one two' ], quux => [ qw(QUUX1 QUUX2 QUUX3) ], evil => [ '/' ], + 'foo.baz' => [ 'FOOBAZ' ], + 'foo.bar' => [ qw(FOOBAR1 FOOBAR2) ], ); foreach my $lose ('?foo=','?:foo=','?@foo=','?:@foo=') { @@ -447,6 +452,12 @@ foreach my $win ( [ '?foo=&@*' => 'FOO', \%all_multi ], [ '?:foo=&@*' => { %all_multi, foo => 'FOO' } ], [ '?:@bar=&*' => { %all_single, bar => [ qw(BAR1 BAR2) ] } ], + [ '?foo.baz=' => 'FOOBAZ' ], + [ '?:foo.baz=' => { 'foo.baz' => 'FOOBAZ' } ], + [ '?foo.bar=' => 'FOOBAR2' ], + [ '?:foo.bar=' => { 'foo.bar' => 'FOOBAR2' } ], + [ '?@foo.bar=' => [ qw(FOOBAR1 FOOBAR2) ] ], + [ '?:@foo.bar=' => { 'foo.bar' => [ qw(FOOBAR1 FOOBAR2) ] } ], ) { my ($spec, @res) = @$win; my $match = $dp->parse($spec); @@ -498,6 +509,12 @@ foreach my $win2 ( [ '/foo/bar/+?foo=&@*' => 'FOO', \%all_multi ], [ '/foo/bar/+?:foo=&@*' => { %all_multi, foo => 'FOO' } ], [ '/foo/bar/+?:@bar=&*' => { %all_single, bar => [ qw(BAR1 BAR2) ] } ], + [ '/foo/bar/+?foo.baz=' => 'FOOBAZ' ], + [ '/foo/bar/+?:foo.baz=' => { 'foo.baz' => 'FOOBAZ' } ], + [ '/foo/bar/+?foo.bar=' => 'FOOBAR2' ], + [ '/foo/bar/+?:foo.bar=' => { 'foo.bar' => 'FOOBAR2' } ], + [ '/foo/bar/+?@foo.bar=' => [ qw(FOOBAR1 FOOBAR2) ] ], + [ '/foo/bar/+?:@foo.bar=' => { 'foo.bar' => [ qw(FOOBAR1 FOOBAR2) ] } ], ) { my ($spec, @res) = @$win2; my $match = $dp->parse($spec); @@ -549,6 +566,12 @@ foreach my $win3 ( [ '/foo/bar+?foo=&@*' => 'FOO', \%all_multi ], [ '/foo/bar+?:foo=&@*' => { %all_multi, foo => 'FOO' } ], [ '/foo/bar+?:@bar=&*' => { %all_single, bar => [ qw(BAR1 BAR2) ] } ], + [ '/foo/bar+?foo.baz=' => 'FOOBAZ' ], + [ '/foo/bar+?:foo.baz=' => { 'foo.baz' => 'FOOBAZ' } ], + [ '/foo/bar+?foo.bar=' => 'FOOBAR2' ], + [ '/foo/bar+?:foo.bar=' => { 'foo.bar' => 'FOOBAR2' } ], + [ '/foo/bar+?@foo.bar=' => [ qw(FOOBAR1 FOOBAR2) ] ], + [ '/foo/bar+?:@foo.bar=' => { 'foo.bar' => [ qw(FOOBAR1 FOOBAR2) ] } ], ) { my ($spec, @res) = @$win3; my $match = $dp->parse($spec);