package Catalyst::Response;
-use strict;
-use base 'Class::Accessor::Fast';
-
-__PACKAGE__->mk_accessors(qw/cookies body headers location status/);
-
-*output = \&body;
-
-sub content_encoding { shift->headers->content_encoding(@_) }
-sub content_length { shift->headers->content_length(@_) }
-sub content_type { shift->headers->content_type(@_) }
-sub header { shift->headers->header(@_) }
+use Moose;
+use HTTP::Headers;
+
+has cookies => (is => 'rw', default => sub { {} });
+has body => (is => 'rw', default => '');
+has location => (is => 'rw');
+has status => (is => 'rw', default => 200);
+has finalized_headers => (is => 'rw', default => 0);
+has headers => (
+ is => 'rw',
+ handles => [qw(content_encoding content_length content_type header)],
+ default => sub { HTTP::Headers->new() },
+ required => 1,
+ lazy => 1,
+);
+has _context => (
+ is => 'rw',
+ weak_ref => 1,
+ handles => ['write'],
+);
+
+sub output { shift->body(@_) }
+
+no Moose;
=head1 NAME
=head1 DESCRIPTION
This is the Catalyst Response class, which provides methods for responding to
-the current client request.
+the current client request. The appropriate L<Catalyst::Engine> for your environment
+will turn the Catalyst::Response into a HTTP Response and return it to the client.
=head1 METHODS
-=over 4
-
-=item $res->body($text)
+=head2 $res->body(<$text|$fh|$iofh_object)
$c->response->body('Catalyst rocks!');
-Sets or returns the output (text or binary data).
+Sets or returns the output (text or binary data). If you are returning a large body,
+you might want to use a L<IO::FileHandle> type of object (Something that implements the read method
+in the same fashion), or a filehandle GLOB. Catalyst
+will write it piece by piece into the response.
-=item $res->content_encoding
+=head2 $res->content_encoding
Shortcut for $res->headers->content_encoding.
-=item $res->content_length
+=head2 $res->content_length
Shortcut for $res->headers->content_length.
-=item $res->content_type
+=head2 $res->content_type
Shortcut for $res->headers->content_type.
-=item $res->cookies
+This value is typically set by your view or plugin. For example,
+L<Catalyst::Plugin::Static::Simple> will guess the mime type based on the file
+it found, while L<Catalyst::View::TT> defaults to C<text/html>.
+
+=head2 $res->cookies
Returns a reference to a hash containing cookies to be set. The keys of the
hash are the cookies' names, and their corresponding values are hash
parameters of the same name, except they are used without a leading dash.
Possible parameters are:
-=over 4
+=over
=item value
=back
-=item $res->header
+=head2 $res->header
Shortcut for $res->headers->header.
-=item $res->headers
+=head2 $res->headers
Returns an L<HTTP::Headers> object, which can be used to set headers.
$c->response->headers->header( 'X-Catalyst' => $Catalyst::VERSION );
-=item $res->output
+=head2 $res->output
Alias for $res->body.
-=item $res->redirect( $url, $status )
+=head2 $res->redirect( $url, $status )
Causes the response to redirect to the specified URL.
return $self->location;
}
-=item $res->status
+=head2 $res->location
+
+Sets or returns the HTTP 'Location'.
+
+=head2 $res->status
Sets or returns the HTTP status.
$c->response->status(404);
-=item $res->write( $data )
+=head2 $res->write( $data )
Writes $data to the output stream.
-=cut
+=head2 meta
-sub write { shift->{_context}->write(@_); }
-
-=back
+Provided by Moose
=head1 AUTHORS
=cut
+__PACKAGE__->meta->make_immutable;
+
1;