Amon2
view release on metacpan or search on metacpan
lib/Amon2/Web/Dispatcher/RouterBoom.pm view on Meta::CPAN
package Amon2::Web::Dispatcher::RouterBoom;
use strict;
use warnings;
use utf8;
use 5.008_001;
use Router::Boom::Method;
sub import {
my $class = shift;
my %args = @_;
my $caller = caller(0);
my $router = Router::Boom::Method->new();
my $base;
no strict 'refs';
*{"${caller}::base"} = sub { $base = $_[0] };
# functions
#
# get( '/path', 'Controller#action')
# post('/path', 'Controller#action')
# put('/path', 'Controller#action')
# delete_('/path', 'Controller#action')
# any( '/path', 'Controller#action')
# get( '/path', sub { })
# post('/path', sub { })
# put('/path', sub { })
# delete_('/path', sub { })
# any( '/path', sub { })
for my $method (qw(get post put delete_ any)) {
*{"${caller}::${method}"} = sub {
my ($path, $dest) = @_;
my %dest;
if (ref $dest eq 'CODE') {
$dest{code} = $dest;
} else {
my ($controller, $method) = split('#', $dest);
$dest{class} = $base ? "${base}::${controller}" : $controller;
$dest{method} = $method if defined $method;
}
my $http_method;
if ($method eq 'get') {
$http_method = ['GET','HEAD'];
} elsif ($method eq 'post') {
$http_method = 'POST';
} elsif ($method eq 'put') {
$http_method = 'PUT';
} elsif ($method eq 'delete_') {
$http_method = 'DELETE';
}
$router->add($http_method, $path, \%dest);
};
}
# class methods
*{"${caller}::router"} = sub { $router };
*{"${caller}::dispatch"} = sub {
( run in 0.446 second using v1.01-cache-2.11-cpan-39bf76dae61 )