7d29679ae59d1218b97eb372bada6b21ff356a47
[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 ();
8
9 # VERSION
10
11 has encoder => (
12    is => 'ro',
13    lazy_build => 1,
14 );
15
16 sub _build_encoder {
17    my $self = shift;
18    return JSON->new->utf8->convert_blessed;
19 }
20
21 sub execute {
22     my $self = shift;
23     my ( $controller, $c ) = @_;
24
25     my $stash_key = (
26             $controller->{'serialize'} ?
27                 $controller->{'serialize'}->{'stash_key'} :
28                 $controller->{'stash_key'}
29         ) || 'rest';
30     my $output = $self->serialize( $c->stash->{$stash_key} );
31     $c->response->output( $output );
32     return 1;
33 }
34
35 sub serialize {
36     my $self = shift;
37     my $data = shift;
38     $self->encoder->encode( $data );
39 }
40
41 __PACKAGE__->meta->make_immutable;
42
43 1;