Added logging to 4xx status handlers
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Controller / REST.pm
index b915203..91434b5 100644 (file)
@@ -22,6 +22,11 @@ sub begin : ActionClass('Deserialize') {}
 
 sub end : ActionClass('Serialize') { }
 
+# You probably want to refer to the HTTP 1.1 Spec for these; they should
+# conform as much as possible.
+#
+# ftp://ftp.isi.edu/in-notes/rfc2616.txt
+
 sub status_created {
     my $self = shift;
     my $c = shift;
@@ -38,8 +43,60 @@ sub status_created {
     }
     $c->response->status(201);
     $c->response->header('Location' => $location);
-    if (exists($p{'entity'})) {
-        $c->stash->{$self->config->{'serialize'}->{'stash_key'}} = $p{'entity'};
+    $self->_set_entity($c, $p{'entity'});
+    return 1;
+}
+
+sub status_ok {
+    my $self = shift;
+    my $c = shift;
+    my %p = validate(@_,
+        {
+            entity => 1, 
+        },
+    );
+
+    $c->response->status(200);
+    $self->_set_entity($c, $p{'entity'});
+    return 1;
+}
+
+sub status_bad_request {
+    my $self = shift;
+    my $c = shift;
+    my %p = validate(@_,
+        {
+            message => { type => SCALAR }, 
+        },
+    );
+
+    $c->response->status(400);
+    $c->log->debug("Status Bad Request: " . $p{'message'});
+    $self->_set_entity($c, { error => $p{'message'} });
+    return 1;
+}
+
+sub status_not_found {
+    my $self = shift;
+    my $c = shift;
+    my %p = validate(@_,
+        {
+            message => { type => SCALAR }, 
+        },
+    );
+
+    $c->response->status(404);
+    $c->log->debug("Status Not Found: " . $p{'message'});
+    $self->_set_entity($c, { error => $p{'message'} });
+    return 1;
+}
+
+sub _set_entity {
+    my $self = shift;
+    my $c = shift;
+    my $entity = shift;
+    if (defined($entity)) {
+        $c->stash->{$self->config->{'serialize'}->{'stash_key'}} = $entity;
     }
     return 1;
 }