why oh why does every class have VERSION???
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Action / Serialize / View.pm
index 7aa66df..62b07bd 100644 (file)
@@ -4,10 +4,17 @@ use namespace::autoclean;
 
 extends 'Catalyst::Action';
 
+our $VERSION = '1.13';
+$VERSION = eval $VERSION;
+
 sub execute {
     my $self = shift;
     my ( $controller, $c, $view ) = @_;
 
+    # Views don't care / are not going to render an entity for 3XX
+    # responses.
+    return 1 if $c->response->status =~ /^(?:204|3\d\d)$/;
+
     my $stash_key = (
             $controller->{'serialize'} ?
                 $controller->{'serialize'}->{'stash_key'} :
@@ -16,10 +23,20 @@ sub execute {
 
     if ( !$c->view($view) ) {
         $c->log->error("Could not load $view, refusing to serialize");
-        return 0;
+        return;
     }
 
-    return $c->view($view)->process($c, $stash_key);
+    if ($c->view($view)->process($c, $stash_key)) {
+      return 1;
+    } else {
+      # This is stupid. Please improve it.
+      my $error = join("\n", @{ $c->error }) || "Error in $view";
+      $error .= "\n";
+      $c->clear_errors;
+      die $error;
+    }
 }
 
+__PACKAGE__->meta->make_immutable;
+
 1;