[Dancer-users] extending the serializer
Mr. Puneet Kishor
punk.kish at gmail.com
Tue Jun 7 23:51:43 CEST 2011
I am trying to write a new serializer plugin called `Dancer::Serializer::Tgz` modeled after Data::Dumper, JSON, etc. The idea is that, in conjunction with `Dancer::Plugin::REST` and `Dancer::Serializer::Mutable`, the user would be able to request data in .tgz format on demand like so --
$ curl http://example.com/employees.tgz
Here is my baby code, and it gives me a rather unhelpful "an internal error occurred". What am I doing wrong? Note: in this case, only the serializer (downloading data) makes sense; the deserializer doesn't make any sense.
-----
package Dancer::Serializer::Tgz;
use strict;
use warnings;
use Carp;
use Dancer ':syntax';
use Archive::Tar;
use base 'Dancer::Serializer::Abstract';
# helpers
sub from_tgz {
my ($string) = @_;
my $s = Dancer::Serializer::Tgz->new;
$s->deserialize($string);
}
sub to_tgz {
my ($data) = @_;
my $s = Dancer::Serializer::Tgz->new;
$s->serialize($data);
}
sub serialize {
my ($self, $entity) = @_;
my $tar = Archive::Tar->new;
$tar->add_data('result', to_json($entity));
my $file = '/tmp/result.tgz';
$tar->write($file, COMPRESS_GZIP);
send_file($file, content_type => 'application/gzip', system_path => 1);
}
sub deserialize {
my ($self, $content) = @_;
croak "not yet implemented";
}
sub content_type {'application/gzip'}
1;
More information about the Dancer-users
mailing list