From: John Napiorkowski Date: Fri, 18 Oct 2013 16:48:06 +0000 (-0500) Subject: more plack compat X-Git-Tag: 5.90050~1^2~36 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=bd822b43dc37efc75451d0f784afb329c173a0d6 more plack compat --- diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm index 9f97a42..2a1ed87 100644 --- a/lib/Catalyst/Engine.pm +++ b/lib/Catalyst/Engine.pm @@ -489,8 +489,13 @@ process the query string and extract query parameters. sub prepare_query_parameters { my ($self, $c) = @_; - my $env = $c->request->env; + + if(my $query_obj = $env->{'plack.request.query'}) { + $c->request->query_parameters($query_obj->as_hashref_mixed); + return; + } + my $query_string = exists $env->{QUERY_STRING} ? $env->{QUERY_STRING} : ''; @@ -498,7 +503,11 @@ sub prepare_query_parameters { # Check for keywords (no = signs) # (yes, index() is faster than a regex :)) if ( index( $query_string, '=' ) < 0 ) { - $c->request->query_keywords( $self->unescape_uri($query_string) ); + $c->request->query_keywords($self->unescape_uri($query_string)); + $env->{'plack.request.query'} ||= Hash::MultiValue->new( + map { (URI::Escape::uri_unescape($_), '') } + split(/\+/, $query_string, -1)); + return; } @@ -529,6 +538,8 @@ sub prepare_query_parameters { $query{$param} = $value; } } + + $env->{'plack.request.query'} ||= Hash::MultiValue->from_mixed(\%query); $c->request->query_parameters( \%query ); } diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index 697e1da..5de7635 100644 --- a/lib/Catalyst/Request.pm +++ b/lib/Catalyst/Request.pm @@ -201,6 +201,14 @@ sub _build_parameters { my $parameters = {}; my $body_parameters = $self->body_parameters; my $query_parameters = $self->query_parameters; + + ## setup for downstream plack + $self->env->{'plack.request.merged'} ||= do { + my $query = $self->env->{'plack.request.query'} || Hash::MultiValue->new; + my $body = $self->env->{'plack.request.body'} || Hash::MultiValue->new; + Hash::MultiValue->new($query->flatten, $body->flatten); + }; + # We copy, no references foreach my $name (keys %$query_parameters) { my $param = $query_parameters->{$name};