BEGIN { extends only needed for method attributes, so not in actions
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Action / Serialize / JSONP.pm
1 package Catalyst::Action::Serialize::JSONP;
2 use Moose;
3 use namespace::autoclean;
4
5 extends 'Catalyst::Action::Serialize::JSON';
6
7 after 'execute' => sub { 
8   my $self = shift;
9   my ($controller, $c) = @_;
10
11   my $callback_key = (
12     $controller->{'serialize'} ?
13       $controller->{'serialize'}->{'callback_key'} :
14       $controller->{'callback_key'} 
15     ) || 'callback';
16
17   my $callback_value = $c->req->param($callback_key);
18   if ($callback_value) {
19     if ($callback_value =~ /^\w+$/) {
20       $c->res->content_type('text/javascript');
21       $c->res->output($callback_value.'('.$c->res->output().');');
22     } else { 
23       warn 'Callback: '.$callback_value.' will not generate valid Javascript. Falling back to JSON output';
24     }
25   }
26 };
27
28 1;