From: Tomas Doran Date: Fri, 28 Oct 2011 21:34:15 +0000 (+0100) Subject: Move prepare_parametrs to be the builder. X-Git-Tag: 5.90008~16^2~15 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=1cbdfa9b4506dadbfa520ed0a1fc33d9064be541 Move prepare_parametrs to be the builder. Makes the 3 failing tests pass again, removes more madness. Breaks the pod test, TODO. --- diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm index e5a5b23..1f87a66 100644 --- a/lib/Catalyst/Engine.pm +++ b/lib/Catalyst/Engine.pm @@ -466,26 +466,7 @@ sets up parameters from query and post parameters. sub prepare_parameters { my ( $self, $c ) = @_; - my $request = $c->request; - my $parameters = {}; - my $body_parameters = $request->body_parameters; - my $query_parameters = $request->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]; - } - $request->{parameters} = $parameters; # FIXME + $c->request->parameters; } =head2 $self->prepare_path($c) 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;