9d5f304438a4d615dbaefcf9da57dffd60d81076
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Action / Serialize / JSON.pm
1 package Catalyst::Action::Serialize::JSON;
2
3 use Moose;
4 use namespace::autoclean;
5
6 extends 'Catalyst::Action';
7 use JSON::MaybeXS qw(JSON);
8
9 has encoder => (
10    is => 'ro',
11    lazy_build => 1,
12 );
13
14 sub _build_encoder {
15    my $self = shift;
16    return JSON->new->utf8->convert_blessed;
17 }
18
19 sub execute {
20     my $self = shift;
21     my ( $controller, $c ) = @_;
22
23     my $stash_key = (
24             $controller->{'serialize'} ?
25                 $controller->{'serialize'}->{'stash_key'} :
26                 $controller->{'stash_key'}
27         ) || 'rest';
28     my $output = $self->serialize( $c->stash->{$stash_key} );
29     $c->response->output( $output );
30     return 1;
31 }
32
33 sub serialize {
34     my $self = shift;
35     my $data = shift;
36     $self->encoder->encode( $data );
37 }
38
39 __PACKAGE__->meta->make_immutable;
40
41 1;