Module-Starter-Smart

 view release on metacpan or  search on metacpan

lib/Module/Starter/Smart.pm  view on Meta::CPAN

    00.load.t       perlcritic.t    pod-coverage.t  pod.t

Troop.pm has been added to Goof-Ball/lib/Goof.

=cut

use parent qw(Module::Starter::Simple);

use ExtUtils::Command qw/mkpath/;
use File::Spec;

# Module implementation here
use subs qw/_unique_sort _pull_modules _list_modules _pull_t _list_t/;

=head1 INTERFACE

No public methods.  The module works by subclassing Module::Starter::Simple and
rewiring its internal behaviors.

=cut

sub create_distro {
    my $class = shift;
    my $self = ref $class? $class: $class->new(@_);

    my $basedir =
        $self->{dir} ||
        $self->{distro} ||
        do {
            (my $first = $self->{modules}[0]) =~ s/::/-/g;
            $first;
        };

    $self->{modules} = [ _unique_sort _pull_modules($basedir), @{$self->{modules}} ];
    $self->SUPER::create_distro;
}

sub create_basedir {
    my $self = shift;
    return $self->SUPER::create_basedir(@_) unless -e $self->{basedir} && !$self->{force};
    $self->progress( "Found $self->{basedir}.  Use --force if you want to stomp on it." );
}

sub create_modules {
    my $self = shift;
    $self->SUPER::create_modules(@_);
}

sub _create_module {
    my $self = shift;
    my $module = shift;
    my $rtname = shift;

    my @parts = split( /::/, $module );
    my $filepart = (pop @parts) . ".pm";
    my @dirparts = ( $self->{basedir}, 'lib', @parts );
    my $manifest_file = join( "/", "lib", @parts, $filepart );
    if ( @dirparts ) {
        my $dir = File::Spec->catdir( @dirparts );
        if ( not -d $dir ) {
            local @ARGV = $dir;
            mkpath @ARGV;
            $self->progress( "Created $dir" );
        }
    }

    my $module_file = File::Spec->catfile( @dirparts,  $filepart );

    $self->{module_file}{$module} =
        File::Spec->catfile('lib', @parts, $filepart);

    if (-e $module_file) {
        $self->progress( "Skipped $module_file" );
    } else {
        open( my $fh, ">", $module_file ) or die "Can't create $module_file: $!\n";
        print $fh $self->module_guts( $module, $rtname );
        close $fh;
        $self->progress( "Created $module_file" );
    }

    return $manifest_file;
}

sub create_t {
    my $self = shift;
    _unique_sort $self->SUPER::create_t(@_), _pull_t $self->{basedir};
}

sub _create_t {
    my $self     = shift;
    my $testdir  = @_ == 2 ? 't' : shift;
    my $filename = shift;
    my $content  = shift;

    my @dirparts = ( $self->{basedir}, $testdir );
    my $tdir = File::Spec->catdir( @dirparts );
    if ( not -d $tdir ) {
        local @ARGV = $tdir;
        mkpath();
        $self->progress( "Created $tdir" );
    }

    my $fname = File::Spec->catfile( @dirparts, $filename );

    if (-e $fname) {
        $self->progress( "Skipped $fname" );
    } else {
        open( my $fh, ">", $fname ) or die "Can't create $fname: $!\n";
        print $fh $content;
        close $fh;
        $self->progress( "Created $fname" );
    }

    return File::Spec->catfile( $testdir, $filename );
}

sub create_Makefile_PL {
    my $self = shift;
    my $main_module = shift;

    my @parts = split( /::/, $main_module );
    my $pm = pop @parts;
    my $main_pm_file = File::Spec->catfile( "lib", @parts, "${pm}.pm" );
    $main_pm_file =~ s{\\}{/}g; # even on Win32, use forward slash

    my $fname = File::Spec->catfile( $self->{basedir}, "Makefile.PL" );

    if (-e $fname) {
        $self->progress( "Skipped $fname" );
    } else {
        open( my $fh, ">", $fname ) or die "Can't create $fname: $!\n";
        print $fh $self->Makefile_PL_guts($main_module, $main_pm_file);
        close $fh;
        $self->progress( "Created $fname" );
    }

    return "Makefile.PL";
}

sub create_Build_PL {
    my $self = shift;
    my $main_module = shift;

    my @parts = split( /::/, $main_module );
    my $pm = pop @parts;
    my $main_pm_file = File::Spec->catfile( "lib", @parts, "${pm}.pm" );
    $main_pm_file =~ s{\\}{/}g; # even on Win32, use forward slash

    my $fname = File::Spec->catfile( $self->{basedir}, "Build.PL" );

    if (-e $fname) {
        $self->progress( "Skipped $fname" );
    } else {
        open( my $fh, ">", $fname ) or die "Can't create $fname: $!\n";
        print $fh $self->Build_PL_guts($main_module, $main_pm_file);
        close $fh;
        $self->progress( "Created $fname" );
    }



( run in 1.214 second using v1.01-cache-2.11-cpan-39bf76dae61 )