Pulp
view release on metacpan or search on metacpan
lib/Pulp.pm view on Meta::CPAN
package Pulp;
use warnings;
use strict;
use true;
use Text::ASCIITable;
use FindBin;
use Module::Find 'useall';
use base 'Kelp';
our $VERSION = '0.001';
sub import {
my ($class, %opts) = @_;
strict->import();
warnings->import();
true->import();
my $caller = caller;
my $routes = [];
my $configs = {};
my $auto = 0;
{
no strict 'refs';
push @{"${caller}::ISA"}, 'Kelp';
# check args
# v2
if ($opts{"-v2"}) {
my $con_tb = Text::ASCIITable->new({ headingText => 'Controllers' });
$con_tb->setCols('Action', 'Path');
my @conts = useall "${caller}::Controller";
for my $mod (@conts) {
my $actions = $mod->_actions;
foreach my $action (keys %$actions) {
$con_tb->addRow($action, $actions->{$action});
}
}
print $con_tb . "\n";
}
# auto load routes?
my @in_mods;
if ($opts{"extends"}) {
@in_mods = useall $opts{"extends"} . "::Route";
}
if ($opts{"-auto"} || $opts{"extends"}) {
$auto = 1;
my $route_tb = Text::ASCIITable->new;
$route_tb->setCols('Routes');
my @mod_routes = useall "${caller}::Route";
for my $mod (@mod_routes) {
$route_tb->addRow($mod);
push @$routes, $mod->get_routes();
}
if (@in_mods) {
for my $mod (@in_mods) {
$route_tb->addRow($mod);
push @$routes, $mod->get_routes();
}
}
print $route_tb . "\n";
}
*{"${caller}::new"} = sub { return shift->SUPER::new(@_); };
*{"${caller}::maps"} = sub {
die "Please don't use -auto and maps at the same time\n"
if $auto;
my ($route_names) = @_;
unless (ref $route_names eq 'ARRAY') {
die "routes() expects an array references";
}
( run in 0.662 second using v1.01-cache-2.11-cpan-39bf76dae61 )