X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FRequest%2FREST.pm;h=16c1e6a5e1cfe94b8b39bfe751d32eeb4cccb0e6;hb=5bbe8fb2380d1d5bc86eb0e595f30c76aa29d6b2;hp=8f3a5a8dea787f2e05a12e48874775c2727234da;hpb=27beb190753ae07d0cac22c1aa46e0c2b00d1ee3;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/Request/REST.pm b/lib/Catalyst/Request/REST.pm index 8f3a5a8..16c1e6a 100644 --- a/lib/Catalyst/Request/REST.pm +++ b/lib/Catalyst/Request/REST.pm @@ -9,6 +9,7 @@ package Catalyst::Request::REST; use strict; use warnings; +use Scalar::Util qw/blessed/; use base qw/Catalyst::Request Class::Accessor::Fast/; @@ -19,7 +20,8 @@ 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 = Catalyst::Utils::class2appclass( $app_class ) || $app_class; + my $app = (blessed($app_class) && $app_class->can('_application')) + ? $app_class->_application : Catalyst::Utils::class2appclass( $app_class ) || $app_class; my $req_class = $app->request_class; return if $req_class->isa($class); @@ -64,7 +66,7 @@ returned the deserialized data structure. __PACKAGE__->mk_accessors(qw(data accept_only)); -=over 4 +=over 4 =item accepted_content_types @@ -126,6 +128,13 @@ sub accepted_content_types { my ( $type, $qvalue ) = @{$pair}[ 0, 3 ]; next if $types{$type}; + # cope with invalid (missing required q parameter) header like: + # application/json; charset="utf-8" + # http://tools.ietf.org/html/rfc2616#section-14.1 + unless ( defined $pair->[2] && lc $pair->[2] eq 'q' ) { + $qvalue = undef; + } + unless ( defined $qvalue ) { $qvalue = 1 - ( ++$counter / 1000 ); }