X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FAction%2FSerialize%2FJSONP.pm;h=31e3ba571a97d5bf366bf64ae0a509ccb41a9033;hb=d0822465cc09629df95ad9c522bce758f2badc8c;hp=00c9f84ab29b37c3c659bc7baa85f985d8b3c2e3;hpb=d0d292d4373d4af3455eac0b88366fef95f354be;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/Action/Serialize/JSONP.pm b/lib/Catalyst/Action/Serialize/JSONP.pm index 00c9f84..31e3ba5 100644 --- a/lib/Catalyst/Action/Serialize/JSONP.pm +++ b/lib/Catalyst/Action/Serialize/JSONP.pm @@ -1,30 +1,33 @@ package Catalyst::Action::Serialize::JSONP; -use base 'Catalyst::Action::Serialize::JSON'; +use Moose; +use namespace::autoclean; -sub execute { +extends 'Catalyst::Action::Serialize::JSON'; + +our $VERSION = '1.02'; +$VERSION = eval $VERSION; + +after 'execute' => sub { my $self = shift; my ($controller, $c) = @_; my $callback_key = ( $controller->{'serialize'} ? $controller->{'serialize'}->{'callback_key'} : - $controller->{'callback_key'} + $controller->{'callback_key'} ) || 'callback'; - if ($c->req->param($callback_key)) { - $self->{_jsonp_callback} = $c->req->param($callback_key); - $c->res->content_type('text/javascript'); + my $callback_value = $c->req->param($callback_key); + if ($callback_value) { + if ($callback_value =~ /^[.\w]+$/) { + $c->res->content_type('text/javascript'); + $c->res->output($callback_value.'('.$c->res->output().');'); + } else { + warn 'Callback: '.$callback_value.' will not generate valid Javascript. Falling back to JSON output'; + } } - $self->next::method($controller, $c); -} +}; -sub serialize { - my $self = shift; - my $json = $self->next::method(@_); - if ($self->{_jsonp_callback}) { - $json = $self->{_jsonp_callback}.'('.$json.');'; - } - return $json; -} +__PACKAGE__->meta->make_immutable; 1;