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