The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Catalyst::View::Download::Plain;

use Moose;
use namespace::autoclean;

extends 'Catalyst::View';

=head1 NAME

Catalyst::View::Download::Plain

=head1 VERSION

0.05

=cut

our $VERSION = "0.05";
$VERSION = eval $VERSION;

__PACKAGE__->config( 'stash_key' => 'plain' );

sub process {
    my $self = shift;
    my ($c) = @_;

    my $template = $c->stash->{ 'template' };
    my $content  = $self->render( $c, $template, $c->stash );

    $c->res->headers->header( "Content-Type" => "text/plain" )
        if ( $c->res->headers->header( "Content-Type" ) eq "" );
    $c->res->body( $content );
}

sub render {
    my $self = shift;
    my ( $c, $template, $args ) = @_;

    my $stash_key = $self->config->{ 'stash_key' };
    my $content   = $c->stash->{ $stash_key } || $c->response->body;

    return $content;
}

__PACKAGE__->meta->make_immutable;

1;

__END__

=head1 SYNOPSIS

    # lib/MyApp/View/Download/Plain.pm
    package MyApp::View::Download::Plain;
    use base qw( Catalyst::View::Download::Plain );
    1;

    # lib/MyApp/Controller/SomeController.pm
    sub example_action_1 : Local {
        my ($self, $c) = @_;

        my $content = "Some Text";

        # To output your data just pass your content into the 'plain' key of the stash
        $c->stash->{'plain'} = $content;

        # Or into the body of the response for this action
        $c->response->body($content);

        # Finally forward processing to the Plain View
        $c->forward('MyApp::View::Download::Plain');
    }

=head1 DESCRIPTION

Takes content and outputs the content as plain text.

=head1 SUBROUTINES

=head2 process

This method will be called by Catalyst if it is asked to forward to a component
without a specified action.

=head2 render

Allows others to use this view for much more fine-grained content generation.

=head1 CONFIG

=over 4

=item stash_key

Determines the key in the stash this view will look for when attempting to
retrieve content to process. If this key isn't found it will then look at
$c->response->body for content.

  $c->view('MyApp::View::Download::Plain')->config->{'stash_key'} = 'content';

=back

=head1 AUTHOR

Travis Chase, C<< <gaudeon at cpan dot org> >>

=head1 SEE ALSO

L<Catalyst> L<Catalyst::View> L<Catalyst::View::Download>

=head1 LICENSE

This program is free software. You can redistribute it and/or modify it
under the same terms as Perl itself.

=cut