r49@latte: adam | 2006-12-03 12:30:40 -0800
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Action / Deserialize / Data / Serializer.pm
CommitLineData
7ad87df9 1#
2# Catalyst::Action::Deserialize::Data::Serializer.pm
3# Created by: Adam Jacob, Marchex, <adam@marchex.com>
4# Created on: 10/12/2006 03:00:32 PM PDT
5#
6# $Id$
7
8package Catalyst::Action::Deserialize::Data::Serializer;
9
10use strict;
11use warnings;
12
13use base 'Catalyst::Action';
14use Data::Serializer;
15
16sub execute {
17 my $self = shift;
18 my ( $controller, $c, $serializer ) = @_;
eccb2137 19
e601adda 20 my $sp = $serializer;
21 $sp =~ s/::/\//g;
22 $sp .= ".pm";
23 eval {
24 require $sp
25 };
26 if ($@) {
27 $c->log->debug("Could not load $serializer, refusing to serialize: $@");
28 return 0;
29 }
7ad87df9 30 my $body = $c->request->body;
31 if ($body) {
32 my $rbody;
eccb2137 33 if ( -f $c->request->body ) {
34 open( BODY, "<", $c->request->body );
35 while ( my $line = <BODY> ) {
7ad87df9 36 $rbody .= $line;
37 }
38 close(BODY);
39 }
eccb2137 40 my $dso = Data::Serializer->new( serializer => $serializer );
e601adda 41 my $rdata;
42 eval {
43 $rdata = $dso->raw_deserialize($rbody);
44 };
45 if ($@) {
46 return $@;
47 }
7ad87df9 48 $c->request->data($rdata);
49 } else {
eccb2137 50 $c->log->debug(
51 'I would have deserialized, but there was nothing in the body!');
7ad87df9 52 }
e601adda 53 return 1;
eccb2137 54}
7ad87df9 55
561;