about summary refs log tree commit diff
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-05-09 14:53:27 +0200
committerfranck cuny <franck@lumberjaph.net>2010-05-09 14:53:27 +0200
commit191ab04b2e7f75a14160ed89da2227ddf40405f0 (patch)
tree339a79544d327778eba601a91bfe64912bb21154
parentremove backend (diff)
downloadpresque-191ab04b2e7f75a14160ed89da2227ddf40405f0.tar.gz
new role to handle error and set content type
-rw-r--r--lib/presque/Role/Error.pm22
-rw-r--r--lib/presque/Role/Response.pm26
2 files changed, 48 insertions, 0 deletions
diff --git a/lib/presque/Role/Error.pm b/lib/presque/Role/Error.pm
new file mode 100644
index 0000000..8f95776
--- /dev/null
+++ b/lib/presque/Role/Error.pm
@@ -0,0 +1,22 @@
+package presque::Role::Error;
+
+use Moose::Role;
+
+sub http_error {
+    my ( $self, $msg, $code ) = @_;
+    $self->response->code( $code || 400 );
+    $self->finish( JSON::encode_json { error => $msg } );
+}
+
+sub http_error_queue {
+    my $self = shift;
+    $self->http_error( 'queue name is missing', 404 );
+}
+
+sub http_error_content_type {
+    my $self = shift;
+    $self->http_error('content-type must be set to application/json');
+}
+
+1;
+
diff --git a/lib/presque/Role/Response.pm b/lib/presque/Role/Response.pm
new file mode 100644
index 0000000..4f0960f
--- /dev/null
+++ b/lib/presque/Role/Response.pm
@@ -0,0 +1,26 @@
+package presque::Role::Response;
+
+use Moose::Role;
+
+before get => sub {
+    (shift)->_set_response_content_type;
+};
+
+before put => sub {
+    (shift)->_set_response_content_type;
+};
+
+before post => sub {
+    (shift)->_set_response_content_type;
+};
+
+before delete => sub {
+    (shift)->_set_response_content_type;
+};
+
+sub _set_response_content_type {
+    my $self = shift;
+    $self->response->header('Content-Type' => 'application/json');
+}
+
+1;