Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/monken/p5-catalystx-controller-extjs-rest-simpleexcel
Serialize to Excel spreadsheets
https://github.com/monken/p5-catalystx-controller-extjs-rest-simpleexcel
Last synced: about 1 month ago
JSON representation
Serialize to Excel spreadsheets
- Host: GitHub
- URL: https://github.com/monken/p5-catalystx-controller-extjs-rest-simpleexcel
- Owner: monken
- Created: 2011-02-01T12:01:41.000Z (almost 14 years ago)
- Default Branch: master
- Last Pushed: 2011-02-01T12:10:40.000Z (almost 14 years ago)
- Last Synced: 2024-10-15T16:23:42.781Z (3 months ago)
- Language: Perl
- Homepage:
- Size: 97.7 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.pod
- Changelog: Changes
Awesome Lists containing this project
README
package # hide from pause
CatalystX::Controller::ExtJS::REST::SimpleExcel::ApplicationToClass;
use Moose;
extends 'Moose::Meta::Role::Application::ToClass';after apply => sub {
my ($self, $role, $class) = @_;
$class->name->config->{map}{'application/vnd.ms-excel'} = 'SimpleExcel';
};package # hide from pause
CatalystX::Controller::ExtJS::REST::SimpleExcel::Trait;
use Moose::Role;sub application_to_class_class {
'CatalystX::Controller::ExtJS::REST::SimpleExcel::ApplicationToClass';
}package CatalystX::Controller::ExtJS::REST::SimpleExcel;
# ABSTRACT: Serialize to Excel spreadsheets
use Moose::Role -traits => 'CatalystX::Controller::ExtJS::REST::SimpleExcel::Trait';
use JSON::XS ();after list => sub {
my ($self, $c) = @_;
return unless($c->request->accepts('application/vnd.ms-excel'));
my $data = $c->stash->{$self->config->{stash_key}};
my @header = map { $_->{mapping} } @{$data->{metaData}->{fields}};
my @rows;
foreach my $row(@{$data->{$self->root_property}}) {
my @row;
foreach my $head(@header) {
my $rcopy = $row;
my $hcopy = $head;
while($hcopy =~ s/^(\w+)\.//) {
$rcopy = $rcopy->{$1};
}
push(@row, ref $rcopy->{$hcopy} ? JSON::XS::encode_json($rcopy->{$hcopy}) : $rcopy->{$hcopy} );
}
push(@rows, \@row);
}
$c->stash->{$self->config->{stash_key}} = {
sheets => [{
name => $self->default_resultset,
header => \@header,
rows => \@rows
}]
};
};1;
__END__
=head1 SYNOPSIS
package MyApp::Controller::User;
use Moose;
extends 'CatalystX::Controller::ExtJS::REST';
with 'CatalystX::Controller::ExtJS::REST::SimpleExcel';
1;
Access C<< /users?content-type=application%2Fvnd.ms-excel >> to get the excel file.=head1 DESCRIPTION
This role loads L and adds
C<< application/vnd.ms-excel >> to the type map. When requesting a list of
objects, this role converts the output to satisfy L.=head1 SEE ALSO
L