X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FResponse.pm;h=e558e4d0be81b706da08f0646880e04a9de1479e;hp=94ee3f3205734d7b7926bc6667a3602299f0adbf;hb=refs%2Fheads%2Fref-util;hpb=e58865461d2d7c80b8136a4b853082cb8031975e diff --git a/lib/Catalyst/Response.pm b/lib/Catalyst/Response.pm index 94ee3f3..e558e4d 100644 --- a/lib/Catalyst/Response.pm +++ b/lib/Catalyst/Response.pm @@ -7,6 +7,7 @@ use namespace::autoclean; 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'; @@ -170,15 +171,15 @@ sub from_psgi_response { 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; @@ -186,7 +187,7 @@ sub from_psgi_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; }