Provided by: libweb-simple-perl_0.020-1_all bug

NAME

       Web::Dispatch::HTTPMethods - Helpers to make RESTFul Dispatchers Easier

SYNOPSIS

           package MyApp:WithHTTPMethods;

           use Web::Simple;
           use Web::Dispatch::HTTPMethods;

           sub as_text {
             [200, ['Content-Type' => 'text/plain'],
               [$_[0]->{REQUEST_METHOD}, $_[0]->{REQUEST_URI}] ]
           }

           sub dispatch_request {
             sub (/get) {
               GET { as_text(pop) }
             },
             sub (/get-head) {
               GET { as_text(pop) }
               HEAD { [204,[],[]] },
             },
             sub (/get-post-put) {
               GET { as_text(pop) }  ## NOTE: no commas separating http methods
               POST { as_text(pop) }
               PUT { as_text(pop) }
             },
           }

DESCRIPTION

       Exports the most commonly used HTTP methods as subroutine helps into your Web::Simple
       based application.  Additionally adds an automatic HTTP code 405 "Method Not Allow" if
       none of the HTTP methods match for a given dispatch and also adds a dispatch rule for
       "HEAD" if no "HEAD" exists but a "GET" does (in which case the "HEAD" returns the "GET"
       dispatch with an empty body.)

       We also add at the end of the chain support for the OPTIONS method (if you do not add one
       yourself.  This defaults to http 200 ok + Allows http headers.

       Also we try to set correct HTTP headers such as "Allows" as makes sense based on your
       dispatch chain.

       The following dispatch chains are basically the same:

           sub dispatch_request {
             sub (/get-http-methods) {
               GET { [200, ['Content-Type' => 'text/plain'], ['Hello World']] }
             },
             sub(/get-classic) {
               sub (GET) { [200, ['Content-Type' => 'text/plain'], ['Hello World']] },
               sub (HEAD)  { [200, ['Content-Type' => 'text/plain'], []] },
               sub (OPTIONS)  {
                 [200, ['Content-Type' => 'text/plain', Allows=>'GET,HEAD,OPTIONS'], []];
               },
               sub () {
                 [405, ['Content-Type' => 'text/plain', Allows=>'GET,HEAD,OPTIONS'],
                  ['Method Not Allowed']]
               },
             }
           }

       The idea here is less boilerplate to distract the reader from the main point of the code
       and also to encapsulate some best practices.

       NOTE You currently cannot mix http method style and prototype sub style in the same scope,
       as in the following example:

           sub dispatch_request {
             sub (/get-head) {
               GET { ... }
               sub (HEAD) { ... }
             },
           }

       If you try this our code will notice and issue a "die".  If you have a good use case
       please bring it to the authors.

   EXPORTS
       This automatically exports the following subroutines:

           GET
           PUT
           POST
           HEAD
           DELETE
           OPTIONS

AUTHOR

       See Web::Simple for AUTHOR

CONTRIBUTORS

       See Web::Simple for CONTRIBUTORS

COPYRIGHT

       See Web::Simple for COPYRIGHT

LICENSE

       See Web::Simple for LICENSE