Amon2-Web-Dispatcher-RouterSimple-Extended
view release on metacpan or search on metacpan
inc/Module/Install.pm view on Meta::CPAN
#####################################################################
# Common Utility Functions
sub _caller {
my $depth = 0;
my $call = caller($depth);
while ( $call eq __PACKAGE__ ) {
$depth++;
$call = caller($depth);
}
return $call;
}
# Done in evals to avoid confusing Perl::MinimumVersion
eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@;
sub _read {
local *FH;
open( FH, '<', $_[0] ) or die "open($_[0]): $!";
my $string = do { local $/; <FH> };
inc/Module/Install/Makefile.pm view on Meta::CPAN
}
sub Makefile { $_[0] }
my %seen = ();
sub prompt {
shift;
# Infinite loop protection
my @c = caller();
if ( ++$seen{"$c[1]|$c[2]|$_[0]"} > 3 ) {
die "Caught an potential prompt infinite loop ($c[1]|$c[2]|$_[0])";
}
# In automated testing or non-interactive session, always use defaults
if ( ($ENV{AUTOMATED_TESTING} or -! -t STDIN) and ! $ENV{PERL_MM_USE_DEFAULT} ) {
local $ENV{PERL_MM_USE_DEFAULT} = 1;
goto &ExtUtils::MakeMaker::prompt;
} else {
goto &ExtUtils::MakeMaker::prompt;
lib/Amon2/Web/Dispatcher/RouterSimple/Extended.pm view on Meta::CPAN
our $VERSION = "0.05.01";
use Router::Simple 0.03;
my @METHODS = qw/GET POST PUT DELETE/;
my $submap;
sub import {
my $class = shift;
my %args = @_;
my $caller = caller(0);
my $router = Router::Simple->new;
no strict 'refs';
# functions
*{"${caller}::submapper"} = \&_submapper;
*{"${caller}::connect"} = \&_connect;
for my $method (@METHODS) {
*{"${caller}::@{[lc $method]}"} = _make_method_connector($caller, $method);
lib/Amon2/Web/Dispatcher/RouterSimple/Extended.pm view on Meta::CPAN
$class->router->$meth(@_)
};
}
*{"$caller\::dispatch"} = \&_dispatch;
}
sub _make_method_connector {
my ($caller, $method) = @_;
sub {
my $class = caller(0);
if ($submap) {
my ($path, $action) = @_;
$submap->connect($path, { action => $action }, { metod => $method });
} else {
$_[2] = { method => $method };
goto \&_connect;
}
}
}
sub _connect {
my $caller = caller(0);
if ($submap) {
if (@_ >= 2 && !ref $_[1]) {
my ($path, $action, $opt) = @_;
$submap->connect($path, { action => $action }, $opt || {});
} else {
$submap->connect(@_);
}
} else {
my $router = $caller->router;
if (@_ >= 2 && !ref $_[1]) {
lib/Amon2/Web/Dispatcher/RouterSimple/Extended.pm view on Meta::CPAN
my $dest = { controller => $controller };
$dest->{action} = $action if defined $action;
$router->connect($path, $dest, $opt || {});
} else {
$router->connect(@_);
}
}
}
sub _submapper {
my $caller = caller(0);
my $router = caller(0)->router();
if ($_[2] && ref($_[2]) eq 'CODE') {
my ($path, $controller, $callback) = @_;
$submap = $router->submapper($path, { controller => $controller });
$callback->();
undef $submap;
}
else {
$router->submapper(@_);
}
}
( run in 0.328 second using v1.01-cache-2.11-cpan-26ccb49234f )