X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FRequest%2FREST.pm;h=75caccd751156cc245a60bba6aae2b5319e7acf3;hb=d0822465cc09629df95ad9c522bce758f2badc8c;hp=9b81c622adaeea294ca976d7dfcb6943ef3a912e;hpb=256c894fcf95e1a0716676afb8f5732854734672;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/Request/REST.pm b/lib/Catalyst/Request/REST.pm index 9b81c62..75caccd 100644 --- a/lib/Catalyst/Request/REST.pm +++ b/lib/Catalyst/Request/REST.pm @@ -1,18 +1,87 @@ -# -# REST.pm -# Created by: Adam Jacob, Marchex, -# Created on: 10/13/2006 03:54:33 PM PDT -# -# $Id: $ - package Catalyst::Request::REST; +use Moose; + +use Catalyst::Utils; +use namespace::autoclean; + +extends 'Catalyst::Request'; +with 'Catalyst::TraitFor::Request::REST'; -use strict; -use warnings; +our $VERSION = '1.02'; +$VERSION = eval $VERSION; -use base 'Catalyst::Request'; +# Please don't take this as a recommended way to do things. +# The code below is grotty, badly factored and mostly here for back +# compat.. +sub _insert_self_into { + my ($class, $app_class ) = @_; + # the fallback to $app_class is for the (rare and deprecated) case when + # people are defining actions in MyApp.pm instead of in a controller. + my $app = (blessed($app_class) && $app_class->can('_application')) + ? $app_class->_application : Catalyst::Utils::class2appclass( $app_class ) || $app_class; -__PACKAGE__->mk_accessors(qw(data)); + my $req_class = $app->request_class; + return if $req_class->isa($class); + my $req_class_meta = Moose->init_meta( for_class => $req_class ); + my $role = $class->_related_role; + return if $req_class_meta->does_role($role); + if ($req_class eq 'Catalyst::Request') { + $app->request_class($class); + } + else { + my $meta = Moose::Meta::Class->create_anon_class( + superclasses => [$req_class], + roles => [$role], + cache => 1 + ); + $meta->_add_meta_method('meta'); + $app->request_class($meta->name); + } +} + +sub _related_role { 'Catalyst::TraitFor::Request::REST' } + +__PACKAGE__->meta->make_immutable; 1; +__END__ + +=head1 NAME + +Catalyst::Request::REST - A REST-y subclass of Catalyst::Request + +=head1 SYNOPSIS + + if ( $c->request->accepts('application/json') ) { + ... + } + + my $types = $c->request->accepted_content_types(); + +=head1 DESCRIPTION + +This is a subclass of C that applies the +L role to your request class. That trait +adds a few methods to the request object to facilitate writing REST-y code. + +This class is only here for backwards compatibility with applications already +subclassing this class. New code should use +L directly. + +L and L will arrange +for the request trait to be applied if needed. + +=head1 SEE ALSO + +L. + +=head1 AUTHORS + +See L for authors. + +=head1 LICENSE + +You may distribute this code under the same terms as Perl itself. + +=cut