has write_fh => (
is=>'ro',
- predicate=>'has_write_fh',
+ predicate=>'_has_write_fh',
lazy=>1,
builder=>'_build_write_fh',
);
sub DEMOLISH {
my $self = shift;
- return if $self->has_write_fh;
+ return if $self->_has_write_fh;
if($self->_has_writer) {
$self->_writer->close
}
if(ref $psgi_res eq 'ARRAY') {
my ($status, $headers, $body) = @$psgi_res;
$self->status($status);
- $self->headers($headers);
+ $self->headers(HTTP::Headers->new(@$headers));
if(ref $body eq 'ARRAY') {
$self->body(join '', grep defined, @$body);
} else {
}
} elsif(ref $psgi_res eq 'CODE') {
$psgi_res->(sub {
- my ($status, $headers, $maybe_body) = @_;
+ my $response = shift;
+ my ($status, $headers, $maybe_body) = @$response;
$self->status($status);
- $self->headers($headers);
+ $self->headers(HTTP::Headers->new(@$headers));
if($maybe_body) {
if(ref $maybe_body eq 'ARRAY') {
$self->body(join '', grep defined, @$maybe_body);
} else {
return $self->write_fh;
}
- });
- } else {
+ });
+ } else {
die "You can't set a Catalyst response from that, expect a valid PSGI response";
}
}
in the same fashion), or a filehandle GLOB. Catalyst
will write it piece by piece into the response.
+When using a L<IO::Handle> type of object and no content length has been
+already set in the response headers Catalyst will make a reasonable attempt
+to determine the size of the Handle. Depending on the implementation of your
+handle object, setting the content length may fail. If it is at all possible
+for you to determine the content length of your handle object,
+it is recomended that you set the content length in the response headers
+yourself, which will be respected and sent by Catalyst in the response.
+
=head2 $res->has_body
Predicate which returns true when a body has been set.
sub myaction :Local Args {
my ($self, $c) = @_;
- $c->res->from_psgi_response($app->($self->env));
+ $c->res->from_psgi_response($app->($c->req->env));
}
Please note this does not attempt to map or nest your PSGI application under