# Rest - mini-framework for creating REST-ful web apps # Copyright 2006, Daniel J. Parks # # (insert license, disclaimer/non-warranty, etc. here) # # (insert install instructions here; no, put them in POD) # TODO: POD, tests # TODO: return useful HTTP error codes package REST; use strict; use CGI; our $DEBUG = 0; sub new { return bless {CGI => CGI->new}, shift }; sub cgi { shift()->{CGI} } sub debug { my ($self, $urls, @problems) = @_; my $cgi = $self->cgi; print $cgi->header, $cgi->start_html, "REST::debug executing: @problems
", "
", (map { "
$_
$urls->{$_}
" } keys %$urls), "
", "Path info: ", $cgi->path_info, "
", "Request method: ", $cgi->request_method, "
", $cgi->end_html; } sub run { my ($self, %urls) = @_; my $pathInfo = $self->cgi->path_info; my $method = $self->cgi->request_method; my ($package, @pathParams); foreach my $path ( keys %urls ) { $package = $urls{$path}; if ( $pathInfo =~ $path ) { @pathParams = ($1, $2, $3, $4, $5, $6, $7, $8, $9); last; } undef $package; } if ( $package ) { my $dispatcher = $package->new; if ( $dispatcher->can($method) ) { $dispatcher->$method($self->cgi, @pathParams); return; } } if ( $DEBUG ) { $self->debug(\%urls, $@); } else { print $self->cgi->header, $self->cgi->start_html, $self->cgi->end_html; } } 1;