X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FController%2FREST.pm;h=a9b67f67d96ea2a50a01d5e359a5474b94e70ae5;hb=refs%2Ftags%2Fv1.15;hp=d43ef86afbf5e6987c823cd3daa95b8be10bad6c;hpb=9b5736d5d906e63a9697f4b2a3a882a9e853ecd6;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/Controller/REST.pm b/lib/Catalyst/Controller/REST.pm index d43ef86..a9b67f6 100644 --- a/lib/Catalyst/Controller/REST.pm +++ b/lib/Catalyst/Controller/REST.pm @@ -561,6 +561,79 @@ sub status_gone { return 1; } +=item status_see_other + +Returns a "303 See Other" response. Takes an optional "entity" to serialize, +and a "location" where the client should redirect to. + +Example: + + $self->status_see_other( + $c, + location => $some_other_url, + entity => { + radiohead => "Is a good band!", + } + ); + +=cut + +sub status_see_other { + my $self = shift; + my $c = shift; + my %p = Params::Validate::validate( + @_, + { + location => { type => SCALAR | OBJECT }, + entity => { optional => 1 }, + }, + ); + + $c->response->status(303); + $c->response->header( 'Location' => $p{location} ); + $self->_set_entity( $c, $p{'entity'} ); + return 1; +} + +=item status_moved + +Returns a "301 MOVED" response. Takes an "entity" to serialize, and a +"location" where the created object can be found. + +Example: + + $self->status_moved( + $c, + location => '/somewhere/else', + entity => { + radiohead => "Is a good band!", + }, + ); + +=cut + +sub status_moved { + my $self = shift; + my $c = shift; + my %p = Params::Validate::validate( + @_, + { + location => { type => SCALAR | OBJECT }, + entity => { optional => 1 }, + }, + ); + + my $location = ref $p{location} + ? $p{location}->as_string + : $p{location} + ; + + $c->response->status(301); + $c->response->header( Location => $location ); + $self->_set_entity($c, $p{entity}); + return 1; +} + sub _set_entity { my $self = shift; my $c = shift;