X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FController%2FREST.pm;h=18653eb069e25390fb7670e284b31f9248ca558f;hb=26b59bcb480fe0ddb76deae691cabba3cd782776;hp=99addacf7be834adff4d4b5810efac52c9841946;hpb=d3f3a2ed11595db3f5d10e8ae395a04209670356;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/Controller/REST.pm b/lib/Catalyst/Controller/REST.pm index 99addac..18653eb 100644 --- a/lib/Catalyst/Controller/REST.pm +++ b/lib/Catalyst/Controller/REST.pm @@ -1,8 +1,8 @@ package Catalyst::Controller::REST; -use strict; -use warnings; +use Moose; +use namespace::autoclean; -our $VERSION = '0.79'; +our $VERSION = '0.81'; $VERSION = eval $VERSION; =head1 NAME @@ -36,8 +36,16 @@ Catalyst::Controller::REST - A RESTful controller # Answer PUT requests to "thing" sub thing_PUT { - ... some action ... - } + $radiohead = $req->data->{radiohead}; + + $self->status_created( + $c, + location => $c->req->uri->as_string, + entity => { + radiohead => $radiohead, + } + ); + } =head1 DESCRIPTION @@ -69,9 +77,11 @@ The serialization format will be selected based on the content-type of the incoming request. It is probably easier to use the L, which are described below. -The HTTP POST, PUT, and OPTIONS methods will all automatically deserialize the -contents of $c->request->body based on the requests content-type header. -A list of understood serialization formats is below. +"The HTTP POST, PUT, and OPTIONS methods will all automatically +L the contents of +C<< $c->request->body >> into the C<< $c->request->data >> hashref", based on +the request's C header. A list of understood serialization +formats is L. If we do not have (or cannot run) a serializer for a given content-type, a 415 "Unsupported Media Type" error is generated. @@ -128,7 +138,7 @@ Returns YAML generated by L. =item * C => C This uses L and L to generate YAML with all URLs turned -to hyperlinks. Only useable for Serialization. +to hyperlinks. Only usable for Serialization. =item * C => C @@ -136,6 +146,10 @@ Uses L to generate JSON output. It is strongly advised to also have L installed. The C content type is supported but is deprecated and you will receive warnings in your log. +=item * C => C + +If a callback=? parameter is passed, this returns javascript in the form of: $callback($serializedJSON); + =item * C => C Uses the L module to generate L output. @@ -245,7 +259,7 @@ such require you pass the current context ($c) as the first argument. =cut -use base 'Catalyst::Controller'; +BEGIN { extends 'Catalyst::Controller' } use Params::Validate qw(SCALAR OBJECT); __PACKAGE__->mk_accessors(qw(serialize)); @@ -258,6 +272,9 @@ __PACKAGE__->config( 'text/x-yaml' => 'YAML', 'application/json' => 'JSON', 'text/x-json' => 'JSON', + 'application/x-javascript' => 'JSONP', + 'application/javascript' => 'JSONP', + 'text/javascript' => 'JSONP', 'text/x-data-dumper' => [ 'Data::Serializer', 'Data::Dumper' ], 'text/x-data-denter' => [ 'Data::Serializer', 'Data::Denter' ], 'text/x-data-taxi' => [ 'Data::Serializer', 'Data::Taxi' ], @@ -492,6 +509,9 @@ This class provides a default configuration for Serialization. It is currently: 'text/x-yaml' => 'YAML', 'application/json' => 'JSON', 'text/x-json' => 'JSON', + 'application/x-javascript' => 'JSONP', + 'application/javascript' => 'JSONP', + 'text/javascript' => 'JSONP', 'text/x-data-dumper' => [ 'Data::Serializer', 'Data::Dumper' ], 'text/x-data-denter' => [ 'Data::Serializer', 'Data::Denter' ], 'text/x-data-taxi' => [ 'Data::Serializer', 'Data::Taxi' ], @@ -512,8 +532,11 @@ method uses L. If you want to override either behavior, simply implement your own C and C actions and use MRO::Compat: - my Foo::Controller::Monkey; - use base qw(Catalyst::Controller::REST); + package Foo::Controller::Monkey; + use Moose; + use namespace::autoclean; + + BEGIN { extends 'Catalyst::Controller::REST' } sub begin :Private { my ($self, $c) = @_;