Download.pm

- NAME
- VERSION
- SYNOPSIS
- CONFIG
- Content-Type Module Requirements
- CURRENT CONTENT-TYPES SUPPORTED

- text/csv
- text/plain

- AUTHOR
- BUGS
- SUPPORT
- SEE ALSO
- CONTRIBUTORS
- ACKNOWLEDGEMENTS
- COPYRIGHT & LICENSE

# NAME

Catalyst::View::Download

# VERSION

Version 0.01

# SYNOPSIS

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

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

                    my $content_type = $c->request->params->{'content_type'} || 'plain'; # 'plain' or 'csv'

                    $c->header('Content-Type' => 'text/'.$content_type); # Set the content type so Catalyst::View::Download can determine how to process it.

                    # Array reference of array references.
                    my $data = [
                            ['col 1','col 2','col ...','col N'], # row 1
                            ['col 1','col 2','col ...','col N'], # row 2
                            ['col 1','col 2','col ...','col N'], # row ...
                            ['col 1','col 2','col ...','col N']  # row N
                    ];

                    # If the chosen content_type is 'csv' then the render function of Catalyst::View::Download::CSV will be called which uses the 'csv' stash key
                    $c->stash->{'csv'} = $data;

                    # For plain text in this example we just dump the example array
                    # Catalyst::View::Download::Plain will use either the 'plain' stash key or just pull from $c->response->body
                    use Data::Dumper;
                    $c->response->body( Dumper( $data ) )

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

# CONFIG

default

  Determines which Content-Type to use by default. Default: 'text/plain'

              $c->view('MyApp::View::Download')->config('default' => 'text/plain');

content_type

  A hash ref of hash refs. Each key in content_type is Content-Type that is handled by this view.

              $c->view('MyApp::View::Download')->config->{'content_type'}{'text/csv'} = {
                      'outfile' => 'somefile.csv',
                      'module' => 'My::Module'
              };

  The Content-Type key refers to it's own hash of parameters to determine the actions thie view should take for that Content-Type.

  'outfile' - The name and extenstion of the file that will display by default in the download dialog box.

  'module' - The name of the module that will handle data output. If there is a plus symbol '+' at the beginning of the module name, this will indicate that the module is a Catalyst::View module will will add 'Catalyst::View::' to the beginning of the module name.

              $c->view('MyApp::View::Download')->config->{'content_type'}{'text/csv'}{'module'} = '+Download::CSV'; # Module Loaded: Catalyst::View::Download::CSV

              $c->view('MyApp::View::Download')->config->{'content_type'}{'text/csv'}{'module'} = 'My::Module::CSV'; # Module Loaded: My::Module::CSV

# Content-Type Module Requirements

Any module set as 'the' module for a certain Content-Type needs to have a subroutine named 'render' that returns the content to output with the following parameters handled.

$c

  The catalyst $c variable

$template

  In case a template file is needed for the module. This view will pass $c->stash->{template} as this value.

$args

  A list of arguments the module will use to process the data into content. This view will pass $c->stash as this value.

# CURRENT CONTENT-TYPES SUPPORTED

## text/csv

Catalyst::View::Download has the following default configuration for this Content-Type

            $c->view('MyApp::View::Download')->config->{'content_type'}{'text/csv'} = {
                    'outfile' => 'data.csv',
                    'module' => '+Download::CSV'
            };

See the Catalyst::View::Download::CSV manpage for more details.

## text/plain

Catalyst::View::Download has the following default configuration for this Content-Type

            $c->view('MyApp::View::Download')->config->{'default'} = 'text/plain';

            $c->view('MyApp::View::Download')->config->{'content_type'}{'text/csv'} = {
                    'outfile' => 'data.csv',
                    'module' => '+Download::CSV'
            };

    See L<Catalyst::View::Download::Plain> for more details.

# AUTHOR

Travis Chase, `<gaudeon at cpan.org>`

# BUGS

Please report any bugs or feature requests to `bug-catalyst-view-download at rt.cpan.org`, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

# SUPPORT

You can find documentation for this module with the perldoc command.

        perldoc Catalyst::View::Download

You can also look for information at:

- RT: CPAN's request tracker

  http://rt.cpan.org/NoAuth/Bugs.html

- AnnoCPAN: Annotated CPAN documentation

  http://annocpan.org/dist/Catalyst-View-Download

- CPAN Ratings

  http://cpanratings.perl.org/d/Catalyst-View-Download

- Search CPAN

  http://search.cpan.org/dist/Catalyst-View-Download

# SEE ALSO

Catalyst the Catalyst::View manpage

# CONTRIBUTORS

# ACKNOWLEDGEMENTS

Thanks to following people for their constructive comments and help:

J. Shirley
Jonathan Rockway

Thanks also to my company Ti4 Technologies for their financial support. http://www.ti4tech.com/

# COPYRIGHT & LICENSE

Copyright 2008 Travis Chase, all rights reserved.

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