This is an automated email from the git hooks/post-receive script.

js pushed a commit to annotated tag v0.10
in repository libdancer-plugin-rest-perl.

commit 2f64ae1e549c2fe16dbd9a6e03eab83d036d866d
Author: Yanick Champoux <yan...@babyl.dyndns.org>
Date:   Sat Mar 22 11:18:34 2014 -0400

    code refactoring
    
    Allow  to only define a subset of the actions for a resource.
---
 Changes                   |  1 +
 lib/Dancer/Plugin/REST.pm | 46 ++++++++++++++++++++++++----------------------
 t/03_resource.t           |  8 ++++++--
 3 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/Changes b/Changes
index 6a78da0..e2a8be8 100644
--- a/Changes
+++ b/Changes
@@ -9,6 +9,7 @@ Revision history for {{$DIST}}
  [DOCUMENTATION]
 
  [ENHANCEMENTS]
+ - 'resource' can now be used with a subset of its actions.
 
  [NEW FEATURES]
 
diff --git a/lib/Dancer/Plugin/REST.pm b/lib/Dancer/Plugin/REST.pm
index 855c770..bdcc606 100644
--- a/lib/Dancer/Plugin/REST.pm
+++ b/lib/Dancer/Plugin/REST.pm
@@ -59,36 +59,38 @@ register prepare_serializer_for_format => sub {
     }
 };
 
-register resource => sub {
-    my ($resource, %triggers) = @_;
+my %triggers_map = (
+    get    => \&get,
+    update => \&put,
+    create => \&post,
+    delete => \&del,
+);
 
-    croak "resource should be given with triggers"
-      unless defined $resource
-          and defined $triggers{get}
-          and defined $triggers{update}
-          and defined $triggers{delete}
-          and defined $triggers{create};
+register resource => sub {
+    croak "resource invoked without arguments" unless @_;
 
-    get "/${resource}/:id.:format" => $triggers{get};
-    get "/${resource}/:id"         => $triggers{get};
+    my ($resource, %triggers) = @_;
 
-    put "/${resource}/:id.:format" => $triggers{update};
-    put "/${resource}/:id"         => $triggers{update};
+    while( my( $t, $sub ) = each %triggers ) {
+        my $method = $triggers_map{$t}
+            or croak "action '$t' not recognized";
 
-    post "/${resource}.:format" => $triggers{create};
-    post "/${resource}"         => $triggers{create};
+        if ( $t eq 'create' ) {
+            $method->( "/${resource}" => $triggers{$t} );
+        }
+        else {
+            for my $ext ( '', '.:format' ) {
+                $method->( "/${resource}/:id$ext" => $triggers{$t} );
+            }
+        }
+    }
 
-    del "/${resource}/:id.:format" => $triggers{delete};
-    del "/${resource}/:id"         => $triggers{delete};
 };
 
 register send_entity => sub {
-    my ($entity, $http_code) = @_;
-
-    $http_code ||= 200;
-
-    status($http_code);
-    $entity;
+    # entity, status_code
+    status($_[1] || 200);
+    $_[0];
 };
 
 my %http_codes = (
diff --git a/t/03_resource.t b/t/03_resource.t
index 8812ae9..60bd984 100644
--- a/t/03_resource.t
+++ b/t/03_resource.t
@@ -57,8 +57,12 @@ plan tests => 8;
         { user => $users->{$id} };
     }
 
-    eval { resource failure => get => sub { 'GET' } };
-    like $@, qr{resource should be given with triggers}, 
+    eval { 
+        resource failure => 
+            get => sub { 'GET' },
+            woobly => sub { },
+    };
+    like $@, qr{action 'woobly' not recognized}, 
         "resource must have 4 hooks";
 }
 

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-perl/packages/libdancer-plugin-rest-perl.git

_______________________________________________
Pkg-perl-cvs-commits mailing list
Pkg-perl-cvs-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits

Reply via email to