Added JSONP module and tests. Child of Catalyst::Action::Serialize::JSON that allows...
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Action / Serialize / JSONP.pm
1 package Catalyst::Action::Serialize::JSONP;
2 use base 'Catalyst::Action::Serialize::JSON';
3
4 sub execute {
5   my $self = shift;
6   my ($controller, $c) = @_;
7
8   my $callback_key = (
9     $controller->{'serialize'} ?
10       $controller->{'serialize'}->{'callback_key'} :
11       $controller->{'callback_key'} 
12     ) || 'callback';
13
14   if ($c->req->param($callback_key)) {
15     $self->{_jsonp_callback} = $c->req->param($callback_key);
16     $c->res->content_type('text/javascript');
17   }
18   $self->next::method($controller, $c);
19 }
20
21 sub serialize {
22   my $self = shift;
23   my $json = $self->next::method(@_);
24   if ($self->{_jsonp_callback}) {
25     $json = $self->{_jsonp_callback}.'('.$json.');';
26   }
27   return $json;
28 }
29
30 1;