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 )