about summary refs log tree commit diff
path: root/lib/presque/RestQueueHandler.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/presque/RestQueueHandler.pm')
-rw-r--r--lib/presque/RestQueueHandler.pm44
1 files changed, 10 insertions, 34 deletions
diff --git a/lib/presque/RestQueueHandler.pm b/lib/presque/RestQueueHandler.pm
index a7842f5..115b3e5 100644
--- a/lib/presque/RestQueueHandler.pm
+++ b/lib/presque/RestQueueHandler.pm
@@ -1,26 +1,17 @@
 package presque::RestQueueHandler;
 
+use JSON;
 use Moose;
 extends 'Tatsumaki::Handler';
-with 'presque::Role::QueueName';
+with
+  qw/presque::Role::QueueName presque::Role::Error presque::Role::Response/;
 
 __PACKAGE__->asynchronous(1);
 
-use JSON;
-
-before [qw/get post/] => sub {
-    my $self = shift;
-    $self->response->header('Content-Type' => 'application/json');
-};
-
 sub get {
     my ( $self, $queue_name ) = @_;
 
-    if ( !$queue_name ) {
-        $self->finish(
-            JSON::encode_json( { error => 'queue name is missing' } ) );
-        return;
-    }
+    return $self->http_error_queue if ( !$queue_name );
 
     my $dkey = $self->_queue_delayed($queue_name);
     my $lkey = $self->_queue($queue_name);
@@ -58,9 +49,7 @@ sub get {
                             );
                         }
                         else {
-                            $self->response->code(404);
-                            $self->finish(
-                                JSON::encode_json( { error => "no job" } ) );
+                            $self->http_error('no job', 404);
                         }
                     }
                 );
@@ -72,20 +61,11 @@ sub get {
 sub post {
     my ( $self, $queue_name ) = @_;
 
-    if ( !$queue_name ) {
-        $self->finish(
-            JSON::encode_json( { error => 'queue name is missing' } ) );
-        return;
-    }
+    return $self->http_error_queue if ( !$queue_name );
 
-    if ( $self->request->header('Content-Type') ne 'application/json' ) {
-        $self->finish(
-            JSON::encode_json(
-                { error => 'content-type must be application/json' }
-            )
-        );
-        return;
-    }
+    return $self->http_error_content_type
+      if (!$self->request->header('Content-Type')
+        || $self->request->header('Content-Type') ne 'application/json' );
 
     my $input = $self->request->parameters;
     my $delayed = $input->{delayed};
@@ -128,11 +108,7 @@ sub post {
 sub delete {
     my ( $self, $queue_name ) = @_;
 
-    if ( !$queue_name ) {
-        $self->finish(
-            JSON::encode_json( { error => 'queue name is missing' } ) );
-        return;
-    }
+    return $self->http_error_queue if ( !$queue_name );
 
     # delete delayed queue
     my $lkey = $self->_queue($queue_name);