v1.21
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Action / Deserialize / YAML.pm
CommitLineData
256c894f 1package Catalyst::Action::Deserialize::YAML;
2
930013e6 3use Moose;
4use namespace::autoclean;
1bb5ad32 5use Scalar::Util qw(openhandle);
256c894f 6
930013e6 7extends 'Catalyst::Action';
256c894f 8use YAML::Syck;
256c894f 9
10sub execute {
11 my $self = shift;
12 my ( $controller, $c, $test ) = @_;
eccb2137 13
7ad87df9 14 my $body = $c->request->body;
15 if ($body) {
1bb5ad32 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
e601adda 28 my $rdata;
29 eval {
1bb5ad32 30 $rdata = Load( $rbody );
e601adda 31 };
32 if ($@) {
33 return $@;
34 }
256c894f 35 $c->request->data($rdata);
256c894f 36 } else {
eccb2137 37 $c->log->debug(
faf5c20b 38 'I would have deserialized, but there was nothing in the body!')
39 if $c->debug;
256c894f 40 }
e601adda 41 return 1;
eccb2137 42}
256c894f 43
24748286 44__PACKAGE__->meta->make_immutable;
45
256c894f 461;