use Scalar::Util 'blessed';
use Catalyst::Response::Writer;
use Catalyst::Utils ();
+use Ref::Util qw(is_plain_arrayref is_plain_coderef);
with 'MooseX::Emulate::Class::Accessor::Fast';
clearer => '_clear_context',
);
-before [qw(status headers content_encoding content_length content_type header)] => sub {
+before [qw(status headers content_encoding content_length content_type )] => sub {
my $self = shift;
- $self->_context->log->warn(
+ $self->_context->log->warn(
"Useless setting a header value after finalize_headers and the response callback has been called." .
- " Not what you want." )
+ " Since we don't support tail headers this will not work as you might expect." )
+ if ( $self->_context && $self->finalized_headers && !$self->_has_response_cb && @_ );
+};
+
+# This has to be different since the first param to ->header is the header name and presumably
+# you should be able to request the header even after finalization, just not try to change it.
+before 'header' => sub {
+ my $self = shift;
+ my $header = shift;
+
+ $self->_context->log->warn(
+ "Useless setting a header value after finalize_headers and the response callback has been called." .
+ " Since we don't support tail headers this will not work as you might expect." )
if ( $self->_context && $self->finalized_headers && !$self->_has_response_cb && @_ );
};
if(blessed($psgi_res) && $psgi_res->can('as_psgi')) {
$psgi_res = $psgi_res->as_psgi;
}
- if(ref $psgi_res eq 'ARRAY') {
+ if(is_plain_arrayref($psgi_res)) {
my ($status, $headers, $body) = @$psgi_res;
$self->status($status);
$self->headers(HTTP::Headers->new(@$headers));
# Can be arrayref or filehandle...
if(defined $body) { # probably paranoia
- ref $body eq 'ARRAY' ? $self->body(join('', @$body)) : $self->body($body);
+ is_plain_arrayref($body) ? $self->body(join('', @$body)) : $self->body($body);
}
- } elsif(ref $psgi_res eq 'CODE') {
+ } elsif(is_plain_coderef($psgi_res)) {
$psgi_res->(sub {
my $response = shift;
my ($status, $headers, $maybe_body) = @$response;
$self->headers(HTTP::Headers->new(@$headers));
if(defined $maybe_body) {
# Can be arrayref or filehandle...
- ref $maybe_body eq 'ARRAY' ? $self->body(join('', @$maybe_body)) : $self->body($maybe_body);
+ is_plain_arrayref($maybe_body) ? $self->body(join('', @$maybe_body)) : $self->body($maybe_body);
} else {
return $self->write_fh;
}