1ea7c9477688806b7b6a908cd199bce7192ab8ac
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Action / Deserialize / YAML.pm
1 package Catalyst::Action::Deserialize::YAML;
2
3 use Moose;
4 use namespace::autoclean;
5 use Scalar::Util qw(openhandle);
6
7 extends 'Catalyst::Action';
8 use YAML::Syck;
9
10 our $VERSION = '1.01';
11 $VERSION = eval $VERSION;
12
13 sub execute {
14     my $self = shift;
15     my ( $controller, $c, $test ) = @_;
16
17     my $body = $c->request->body;
18     if ($body) {
19
20         my $rbody = '';
21
22         if(openhandle $body) {
23             seek($body, 0, 0); # in case something has already read from it
24             while ( defined( my $line = <$body> ) ) {
25                 $rbody .= $line;
26             }
27         } else {
28             $rbody = $body;
29         }
30
31         my $rdata;
32         eval {
33             $rdata = Load( $rbody );
34         };
35         if ($@) {
36             return $@;
37         }
38         $c->request->data($rdata);
39     } else {
40         $c->log->debug(
41             'I would have deserialized, but there was nothing in the body!')
42             if $c->debug;
43     }
44     return 1;
45 }
46
47 __PACKAGE__->meta->make_immutable;
48
49 1;