v1.21
[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 sub execute {
11     my $self = shift;
12     my ( $controller, $c, $test ) = @_;
13
14     my $body = $c->request->body;
15     if ($body) {
16
17         my $rbody = '';
18
19         if(openhandle $body) {
20             seek($body, 0, 0); # in case something has already read from it
21             while ( defined( my $line = <$body> ) ) {
22                 $rbody .= $line;
23             }
24         } else {
25             $rbody = $body;
26         }
27
28         my $rdata;
29         eval {
30             $rdata = Load( $rbody );
31         };
32         if ($@) {
33             return $@;
34         }
35         $c->request->data($rdata);
36     } else {
37         $c->log->debug(
38             'I would have deserialized, but there was nothing in the body!')
39             if $c->debug;
40     }
41     return 1;
42 }
43
44 __PACKAGE__->meta->make_immutable;
45
46 1;