r1144@mbp: claco | 2008-01-03 19:43:42 -0500
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Action / Deserialize / Data / Serializer.pm
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
8 package Catalyst::Action::Deserialize::Data::Serializer;
9
10 use strict;
11 use warnings;
12
13 use base 'Catalyst::Action';
14 use Data::Serializer;
15
16 sub execute {
17     my $self = shift;
18     my ( $controller, $c, $serializer ) = @_;
19
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             if $c->debug;
29         return 0;
30     }
31     my $body = $c->request->body;
32     if ($body) {
33         my $rbody;
34         if ( -f $c->request->body ) {
35             open( BODY, "<", $c->request->body );
36             while ( my $line = <BODY> ) {
37                 $rbody .= $line;
38             }
39             close(BODY);
40         }
41         my $dso = Data::Serializer->new( serializer => $serializer );
42         my $rdata;
43         eval {
44             $rdata = $dso->raw_deserialize($rbody);
45         };
46         if ($@) {
47             return $@;
48         }
49         $c->request->data($rdata);
50     } else {
51         $c->log->debug(
52             'I would have deserialized, but there was nothing in the body!')
53                 if $c->debug;
54     }
55     return 1;
56 }
57
58 1;