add a $VERSION to every module
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Action / Deserialize / Data / Serializer.pm
1 package Catalyst::Action::Deserialize::Data::Serializer;
2
3 use Moose;
4 use namespace::autoclean;
5
6 extends 'Catalyst::Action';
7 use Data::Serializer;
8
9 our $VERSION = '0.81';
10 $VERSION = eval $VERSION;
11
12 sub execute {
13     my $self = shift;
14     my ( $controller, $c, $serializer ) = @_;
15
16     my $sp = $serializer;
17     $sp =~ s/::/\//g;
18     $sp .= ".pm";
19     eval {
20         require $sp
21     };
22     if ($@) {
23         $c->log->debug("Could not load $serializer, refusing to serialize: $@")
24             if $c->debug;
25         return 0;
26     }
27     my $body = $c->request->body;
28     if ($body) {
29         my $rbody;
30         if ( -f $c->request->body ) {
31             open( BODY, "<", $c->request->body );
32             while ( my $line = <BODY> ) {
33                 $rbody .= $line;
34             }
35             close(BODY);
36         }
37         my $dso = Data::Serializer->new( serializer => $serializer );
38         my $rdata;
39         eval {
40             $rdata = $dso->raw_deserialize($rbody);
41         };
42         if ($@) {
43             return $@;
44         }
45         $c->request->data($rdata);
46     } else {
47         $c->log->debug(
48             'I would have deserialized, but there was nothing in the body!')
49                 if $c->debug;
50     }
51     return 1;
52 }
53
54 1;