X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FRequest%2FREST.pm;h=0228edaf0d323af4c288fa12800d1c447b8c3eb0;hb=15f4af0ef06d11960e6cb9a4bbebf2ec1ac19a54;hp=b9b921b8be9e422f9f43e456657fc7f7842f3f90;hpb=e623bdf28cc0a79351b055872dedcc1300a5eaca;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/Request/REST.pm b/lib/Catalyst/Request/REST.pm index b9b921b..0228eda 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'; +# 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 @@ -16,12 +19,15 @@ sub _insert_self_into { my $req_class = $app->request_class; return if $req_class->isa($class); - if ($req_class eq 'Catalyst::Request') { - $app->request_class($class); - } else { - die "$app has a custom request class $req_class, " - . "which is not a $class; see Catalyst::Request::REST"; - } + 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); } __PACKAGE__->meta->make_immutable; @@ -41,67 +47,20 @@ Catalyst::Request::REST - A REST-y subclass of Catalyst::Request =head1 DESCRIPTION -This is a subclass of C that adds a few methods to -the request object to faciliate writing REST-y code. Currently, these -methods are all related to the content types accepted by the client. +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. -Note that if you have a custom request class in your application, and it does -not inherit from C, your application will fail with an -error indicating a conflict the first time it tries to use -C's functionality. To fix this error, make sure your -custom request class inherits from C. +This class is only here for backwards compatibility with applications already +subclassing this class. New code should use +L directly. -=head1 METHODS +L and L will arrange +for the request trait to be applied if needed. -=over +=head1 SEE ALSO -=item data - -If the request went through the Deserializer action, this method will -return the deserialized data structure. - -=item accepted_content_types - -Returns an array reference of content types accepted by the -client. - -The list of types is created by looking at the following sources: - -=over 8 - -=item * Content-type header - -If this exists, this will always be the first type in the list. - -=item * content-type parameter - -If the request is a GET request and there is a "content-type" -parameter in the query string, this will come before any types in the -Accept header. - -=item * Accept header - -This will be parsed and the types found will be ordered by the -relative quality specified for each type. - -=back - -If a type appears in more than one of these places, it is ordered based on -where it is first found. - -=item preferred_content_type - -This returns the first content type found. It is shorthand for: - - $request->accepted_content_types->[0] - -=item accepts($type) - -Given a content type, this returns true if the type is accepted. - -Note that this does not do any wildcard expansion of types. - -=back +L. =head1 AUTHORS