[libdancer-plugin-rest-perl] 03/04: code refactoring
Jonas Smedegaard
dr at jones.dk
Wed Jul 2 11:45:10 UTC 2014
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 <yanick at 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
More information about the Pkg-perl-cvs-commits
mailing list