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 )