X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FRequest.pm;h=ee7f64b7c324389640a20c919ae10d73805c7b55;hp=4ff3f1032c8b85db7d0157bb6a89245223fdc52d;hb=1cbdfa9b4506dadbfa520ed0a1fc33d9064be541;hpb=398f13dbce1fdbedc6718282fe0f581cb2935798 diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index 4ff3f10..ee7f64b 100644 --- a/lib/Catalyst/Request.pm +++ b/lib/Catalyst/Request.pm @@ -101,11 +101,9 @@ has uploads => ( ); has parameters => ( - is => 'rw', - required => 1, - lazy => 1, - default => sub { {} }, - predicate => '_has_prepared_parameters', + is => 'rw', + lazy => 1, + builder => 'prepare_parameters', ); # TODO: @@ -116,11 +114,31 @@ has parameters => ( # these lazy build from there and kill all the direct hash access # in Catalyst.pm and Engine.pm? -before parameters => sub { - my ($self) = @_; +sub prepare_parameters { + my ( $self ) = @_; + $self->prepare_body; - $self->_context->engine->prepare_parameters($self->_context); -}; + my $parameters = {}; + my $body_parameters = $self->body_parameters; + my $query_parameters = $self->query_parameters; + # We copy, no references + foreach my $name (keys %$query_parameters) { + my $param = $query_parameters->{$name}; + $parameters->{$name} = ref $param eq 'ARRAY' ? [ @$param ] : $param; + } + + # Merge query and body parameters + foreach my $name (keys %$body_parameters) { + my $param = $body_parameters->{$name}; + my @values = ref $param eq 'ARRAY' ? @$param : ($param); + if ( my $existing = $parameters->{$name} ) { + unshift(@values, (ref $existing eq 'ARRAY' ? @$existing : $existing)); + } + $parameters->{$name} = @values > 1 ? \@values : $values[0]; + } + $parameters; +} + before body_parameters => sub { my ($self) = @_; $self->prepare_body;