X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FRequest%2FREST.pm;h=72a9d77c84808e98b841370227b6360e93e10312;hb=7566d72f425ab3a870f1d6c8945c43f4edeedf2a;hp=0228edaf0d323af4c288fa12800d1c447b8c3eb0;hpb=15f4af0ef06d11960e6cb9a4bbebf2ec1ac19a54;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/Request/REST.pm b/lib/Catalyst/Request/REST.pm index 0228eda..72a9d77 100644 --- a/lib/Catalyst/Request/REST.pm +++ b/lib/Catalyst/Request/REST.pm @@ -7,6 +7,9 @@ use namespace::autoclean; extends 'Catalyst::Request'; with 'Catalyst::TraitFor::Request::REST'; +our $VERSION = '1.13'; +$VERSION = eval $VERSION; + # 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.. @@ -20,17 +23,28 @@ sub _insert_self_into { my $req_class = $app->request_class; return if $req_class->isa($class); my $req_class_meta = Moose->init_meta( for_class => $req_class ); - return if $req_class_meta->does_role('Catalyst::TraitFor::Request::REST'); - my $meta = Moose::Meta::Class->create_anon_class( - superclasses => [$req_class], - roles => ['Catalyst::TraitFor::Request::REST'], - cache => 1 - ); - $meta->add_method(meta => sub { $meta }); - $app->request_class($meta->name); + 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 @@ -49,7 +63,7 @@ Catalyst::Request::REST - A REST-y subclass of Catalyst::Request 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 faciliate writing REST-y code. +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