[Catalyst-dev] RFC: Catalyst::View::Download
Jon Schutz
jon+catalyst at youramigo.com
Wed Mar 5 23:57:10 GMT 2008
On Wed, 2008-03-05 at 11:34 -0700, Travis Chase wrote:
> 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,
I have implemented something similar locally, being a wrapper around
Text::Table, Text::CSV_XS and Spreadsheet::WriteExcel to support text,
csv and excel respectively. There are other wrappers on CPAN which I
reviewed at the time but I found them to either have bugs w.r.t.
functionality I needed, or to do things in a way which were cumbersome
w.r.t. my requirements, or to not support the cross-section of formats
needed. In any case it's not much extra code. I'm not making any great
claims about my implementation, just trying to provide food for thought.
I found it useful to support multiple worksheets (as in the spreadsheet
concept), and to provide for metadata (title, sheet name, column
headers, notes) as well as the data itself. The API works something
like this:
use Local::Tabular;
my @reports = (
{
title => "Top 10 Wines, by Region",
sheetname => "Top Wines",
headers => [ "Region", "Name", "No of. Top 10 Results" ],
data => \@data,
},
{ add more worksheets here in similar vein ... },
);
my $output = Local::Tabular->new(format => ’txt’, outfile => $file);
$output->print(\@reports);
$output->close();
The Catalyst view is then a wrapper around the above, where @reports is
placed in the stash as you have done with $c->stash->{'csv'}.
(Note that if you end up using Spreadsheet::WriteExcel, all UTF8 strings
need to be encoded as bytes first.)
Another handy feature is to be able to specify data either row-wise or
column-wise.
Regards,
--
Jon Schutz My tech notes http://notes.jschutz.net
Chief Technology Officer http://www.youramigo.com
YourAmigo
More information about the Catalyst-dev
mailing list