X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FAction%2FSerializeBase.pm;h=b7a6765d3186e9657a443efc2464db3380d7fe75;hb=c0aef9cd678b6b4e4ea557d7fa1e8f43153e00b0;hp=2d15713d7f2fac8cb3c87cb1f158ecfb24025460;hpb=9a76221ea1453d244e65429d3e10b5bde42d7733;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/Action/SerializeBase.pm b/lib/Catalyst/Action/SerializeBase.pm index 2d15713..b7a6765 100644 --- a/lib/Catalyst/Action/SerializeBase.pm +++ b/lib/Catalyst/Action/SerializeBase.pm @@ -1,6 +1,6 @@ # # Catlyst::Action::SerializeBase.pm -# Created by: Adam Jacob, Marchex, +# Created by: Adam Jacob, Marchex, # # $Id$ @@ -36,14 +36,42 @@ sub _load_content_plugins { $self->_serialize_plugins( \@plugins ); } - my $content_type = $c->request->preferred_content_type; - # Finally, we load the class. If you have a default serializer, # and we still don't have a content-type that exists in the map, # we'll use it. my $sclass = $search_path . "::"; my $sarg; - my $map = $controller->config->{'serialize'}->{'map'}; + my $map; + + my $config; + + if ( exists $controller->config->{'serialize'} ) { + $c->log->info("Using deprecated configuration for Catalyst::Action::REST!"); + $c->log->info("Please see perldoc Catalyst::Action::REST for the update guide"); + $config = $controller->config->{'serialize'}; + } else { + $config = $controller->config; + } + $map = $config->{'map'}; + # If we don't have a handler for our preferred content type, try + # the default + + my ($content_type) = grep { $map->{$_} } @{$c->request->accepted_content_types}; + + unless ( defined $content_type ) { + if( exists $config->{'default'} ) { + $content_type = $config->{'default'} ; + } else { + return $self->_unsupported_media_type($c, $content_type); + } + } + + # carp about old text/x-json + if ($content_type eq 'text/x-json') { + $c->log->info('Using deprecated text/x-json content-type.'); + $c->log->info('Use application/json instead!'); + } + if ( exists( $map->{$content_type} ) ) { my $mc; if ( ref( $map->{$content_type} ) eq "ARRAY" ) { @@ -64,11 +92,7 @@ sub _load_content_plugins { return $self->_unsupported_media_type($c, $content_type); } } else { - if ( exists( $controller->config->{'serialize'}->{'default'} ) ) { - $sclass .= $controller->config->{'serialize'}->{'default'}; - } else { - return $self->_unsupported_media_type($c, $content_type); - } + return $self->_unsupported_media_type($c, $content_type); } unless ( exists( $self->_loaded_plugins->{$sclass} ) ) { my $load_class = $sclass; @@ -77,8 +101,7 @@ sub _load_content_plugins { eval { require $load_class; }; if ($@) { $c->log->error( - "Error loading $sclass for " . $content_type . ": $!" ) - if $c->log->is_debug; + "Error loading $sclass for " . $content_type . ": $!" ); return $self->_unsupported_media_type($c, $content_type); } else { $self->_loaded_plugins->{$sclass} = 1;