X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FAction%2FSerialize%2FJSON.pm;h=7674ec49d5ddf672ae8f187dd6d103622859be96;hb=7566d72f425ab3a870f1d6c8945c43f4edeedf2a;hp=8da00ee67da2b0a91d74d387478d376015872e73;hpb=10bcd217c37d68aabbb0db8a5a7e233e679cb945;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/Action/Serialize/JSON.pm b/lib/Catalyst/Action/Serialize/JSON.pm index 8da00ee..7674ec4 100644 --- a/lib/Catalyst/Action/Serialize/JSON.pm +++ b/lib/Catalyst/Action/Serialize/JSON.pm @@ -1,10 +1,23 @@ package Catalyst::Action::Serialize::JSON; -use strict; -use warnings; +use Moose; +use namespace::autoclean; -use base 'Catalyst::Action'; -use JSON qw(encode_json); +extends 'Catalyst::Action'; +use JSON (); + +our $VERSION = '1.13'; +$VERSION = eval $VERSION; + +has encoder => ( + is => 'ro', + lazy_build => 1, +); + +sub _build_encoder { + my $self = shift; + return JSON->new->utf8->convert_blessed; +} sub execute { my $self = shift; @@ -13,22 +26,19 @@ sub execute { my $stash_key = ( $controller->{'serialize'} ? $controller->{'serialize'}->{'stash_key'} : - $controller->{'stash_key'} + $controller->{'stash_key'} ) || 'rest'; - my $output; - eval { - $output = $self->serialize( $c->stash->{$stash_key} ); - }; - if ($@) { - return $@; - } + my $output = $self->serialize( $c->stash->{$stash_key} ); $c->response->output( $output ); return 1; } sub serialize { my $self = shift; - encode_json( shift ); + my $data = shift; + $self->encoder->encode( $data ); } +__PACKAGE__->meta->make_immutable; + 1;