Click here to get back home

RFC: Catalyst::View::Download

 HomeNewsGroups | Search | About
 comp.lang.perl.modules    Post an article   get this group's latest topics as an RSS feed add this group's latest topics to your My MSN content add this group's latest topics to your My Yahoo content
Subject Author Date
RFC: Catalyst::View::Download Gaudeon 03-05-2008
Posted by Gaudeon on March 5, 2008, 1:36 pm
Please log in for more thread options
A refined focus of what Catalyst::View::CSV was to be apart of. Note:
Catalyst::View::CSV will move forward, it is instead a part of this
package as Catalyst::View::Download::CSV. Also note, I intend to add
more downloadable formats besides the simple ones (CSV, Plain) I have
listed.

- Travis

=head1 NAME

Catalyst::View::Download

=head1 VERSION

Version 0.01

=head1 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-> ||
'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-> = $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');
}

=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 default

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

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

=item 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->{'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->{'text/
csv'} = '+Download::CSV'; # Module Loaded:
Catalyst::View::Download::CSV

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

=back

=head1 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.

=over 4

=item $c

The catalyst $c variable

=item $template

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

=item $args

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

=back

=head1 CURRENT CONTENT-TYPES SUPPORTED

=head2 text/csv

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

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

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

=head2 text/plain

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

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

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

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

=head1 AUTHOR

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

=head1 BUGS

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

=head1 SUPPORT

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

perldoc Catalyst::View::Download

You can also look for information at:

=over 4

=item * RT: CPAN's request tracker

L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Catalyst-View-Download>

=item * AnnoCPAN: Annotated CPAN documentation

L<http://annocpan.org/dist/Catalyst-View-Download>

=item * CPAN Ratings

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

=item * Search CPAN

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

=back

=head1 SEE ALSO

L<Catalyst> L<Catalyst::View>

=head1 CONTRIBUTORS

=head1 ACKNOWLEDGEMENTS

Thanks to following people for their constructive comments and help:

=over 4

=item J. Shirley

=item Jonathan Rockway

=back

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

=head1 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.

=cut


Similar ThreadsPosted
RFC: Catalyst::View::CSV March 3, 2008, 11:01 am
lwp-download http://..--how do I use it to download pages? June 8, 2008, 5:47 pm
Recursive download from the web February 4, 2005, 1:12 am
download all CPAN modules ? August 25, 2004, 10:35 pm
where can download Filter::netcrypt February 22, 2005, 9:55 pm
How to download web sites with www::robot April 11, 2005, 2:31 am
download file from windows webserver box using LWP November 3, 2005, 4:31 am
Perl Database Programing download for the template January 9, 2008, 12:56 pm
download Modules from CPAN and then load into Perl Question October 15, 2004, 3:07 pm
LWP module - parse one line at a time (only download part of a page) January 20, 2006, 1:50 pm

Our other projects:

Art Dolls, Fairies and Mermaids - Sunnyfaces.net

Roy's Linux, Programming and Search Engines messages

1-Script XML SitemapXML Sitemap