=head2 $self->prepare_parameters($c)
-sets up parameters from query and post parameters.
+Sets up parameters from query and post parameters.
+If parameters have already been set up will clear
+existing parameters and set up again.
=cut
sub prepare_parameters {
my ( $self, $c ) = @_;
- $c->request->parameters;
+ $c->request->_clear_parameters;
+ return $c->request->parameters;
}
=head2 $self->prepare_path($c)
has parameters => (
is => 'rw',
lazy => 1,
- builder => 'prepare_parameters',
+ builder => '_build_parameters',
+ clearer => '_clear_parameters',
);
# TODO:
sub prepare_parameters {
my ( $self ) = @_;
+ $self->_clear_parameters;
+ return $self->parameters;
+}
+
+
+
+sub _build_parameters {
+ my ( $self ) = @_;
my $parameters = {};
my $body_parameters = $self->body_parameters;
my $query_parameters = $self->query_parameters;
Ensures that the body has been parsed, then builds the parameters, which are
combined from those in the request and those in the body.
-This method is the builder for the 'parameters' attribute.
+If parameters have already been set will clear the parameters and build them again.
+
=head2 meta
--- /dev/null
+#!perl
+
+use strict;
+use warnings;
+
+use FindBin;
+use lib "$FindBin::Bin/../lib";
+
+use Test::More tests => 8;
+use Catalyst::Test 'TestApp';
+
+use Catalyst::Request;
+use HTTP::Headers;
+use HTTP::Request::Common;
+
+{
+ my $creq;
+
+ my $parameters = { 'a' => [qw(A b C d E f G)], };
+
+ my $query = join( '&', map { 'a=' . $_ } @{ $parameters->{a} } );
+
+ ok( my $response = request("http://localhost/dump/prepare_parameters?$query"),
+ 'Request' );
+ ok( $response->is_success, 'Response Successful 2xx' );
+ is( $response->content_type, 'text/plain', 'Response Content-Type' );
+ like(
+ $response->content,
+ qr/^bless\( .* 'Catalyst::Request' \)$/s,
+ 'Content is a serialized Catalyst::Request'
+ );
+ ok( eval '$creq = ' . $response->content, 'Unserialize Catalyst::Request' );
+ isa_ok( $creq, 'Catalyst::Request' );
+ is( $creq->method, 'GET', 'Catalyst::Request method' );
+ is_deeply( $creq->parameters, $parameters,
+ 'Catalyst::Request parameters' );
+}
+
+
$c->forward('TestApp::View::Dump::Request');
}
+sub prepare_parameters : Action Relative {
+ my ( $self, $c ) = @_;
+
+ die 'Must pass in parameters' unless keys %{$c->req->parameters};
+
+ $c->req->parameters( {} );
+ die 'parameters are not empty' if keys %{$c->req->parameters};
+
+ # Now reset and reload
+ $c->prepare_parameters;
+ die 'Parameters were not reset' unless keys %{$c->req->parameters};
+
+ $c->forward('TestApp::View::Dump::Request');
+}
sub response : Action Relative {
my ( $self, $c ) = @_;
$c->forward('TestApp::View::Dump::Response');