is => 'rw',
required => 1,
lazy => 1,
- default => sub { {} },
+ builder => 'prepare_body_parameters',
);
has uploads => (
sub prepare_parameters {
my ( $self ) = @_;
-
- $self->prepare_body;
my $parameters = {};
my $body_parameters = $self->body_parameters;
my $query_parameters = $self->query_parameters;
$parameters;
}
-before body_parameters => sub {
- my ($self) = @_;
- $self->prepare_body;
- $self->prepare_body_parameters;
-};
-
has _uploadtmp => (
is => 'ro',
predicate => '_has_uploadtmp',
sub prepare_body_parameters {
my ( $self ) = @_;
+ $self->prepare_body if ! $self->_has_body;
return unless $self->_body;
- $self->{body_parameters} = $self->_body->param; # FIXME!! Recursion here.
+ return $self->_body->param;
}
sub prepare_connection {
# and provide a custom reader..
sub body {
my $self = shift;
- $self->prepare_body();
+ $self->prepare_body unless ! $self->_has_body;
croak 'body is a reader' if scalar @_;
return blessed $self->_body ? $self->_body->body : $self->_body;
}
--- /dev/null
+package TestApp::Controller::BodyParams;
+
+use strict;
+use base 'Catalyst::Controller';
+
+sub default : Private {
+ my ( $self, $c ) = @_;
+ $c->req->body_params({override => 'that'});
+ $c->res->output($c->req->body_params->{override});
+ $c->res->status(200);
+}
+
+1;
use lib "$FindBin::Bin/lib";
use Catalyst::Test 'TestApp', {default_host => 'default.com'};
use Catalyst::Request;
+use HTTP::Request::Common;
use Test::More;
is( $creq->uri->host, $opts{host}, 'target host is mutable via options hashref' );
}
+{
+ my $response = request( POST( '/bodyparams', { override => 'this' } ) )->content;
+ is($response, 'that', 'body param overridden');
+}
+
done_testing;