X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FAction%2FDeserialize.pm;h=fcf7c6ad41d07d8f4b37cc7882a23fd032a4eaff;hb=351f252f57354a5a0c50e3c931b0addd4f1988ff;hp=b87e236a35f1a4df65e1fc82daf4eea97b604f81;hpb=588cbecc2334772603c4ac41133e7a3b446027ee;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/Action/Deserialize.pm b/lib/Catalyst/Action/Deserialize.pm index b87e236..fcf7c6a 100644 --- a/lib/Catalyst/Action/Deserialize.pm +++ b/lib/Catalyst/Action/Deserialize.pm @@ -6,18 +6,26 @@ use namespace::autoclean; extends 'Catalyst::Action::SerializeBase'; use Module::Pluggable::Object; use MRO::Compat; +use Moose::Util::TypeConstraints; -our $VERSION = '0.90'; +our $VERSION = '0.98'; $VERSION = eval $VERSION; has plugins => ( is => 'rw' ); has deserialize_http_methods => ( - traits => ['Array'], - isa => 'ArrayRef[Str]', + traits => ['Hash'], + isa => do { + my $tc = subtype as 'HashRef[Str]'; + coerce $tc, from 'ArrayRef[Str]', + via { +{ map { ($_ => 1) } @$_ } }; + $tc; + }, + coerce => 1, builder => '_build_deserialize_http_methods', handles => { - deserialize_http_methods => 'elements', + deserialize_http_methods => 'keys', + _deserialize_handles_http_method => 'exists', }, ); @@ -27,8 +35,7 @@ sub execute { my $self = shift; my ( $controller, $c ) = @_; - my $method = $c->request->method; - if ( grep /^$method$/, $self->deserialize_http_methods ) { + if ( !defined($c->req->data) && $self->_deserialize_handles_http_method($c->request->method) ) { my ( $sclass, $sarg, $content_type ) = $self->_load_content_plugins( 'Catalyst::Action::Deserialize', $controller, $c );