App-Module-Template

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

t/process_dirs_abs.t
t/process_dirs_rel.t
t/process_file_abs.t
t/process_file_rel.t
t/process_template.t
t/run-badname.t
t/run-direxist.t
t/run-inithome.t
t/run-nomod-switch.t
t/run.t
t/validate_module_name.t
t/write_tmpl_file.t
xt/author/critic.t
xt/author/perlcritic.rc
xt/author/pod-coverage.t
xt/release/kwalitee.t
xt/release/pod-syntax.t
META.yml                                 Module YAML meta-data (added by MakeMaker)
META.json                                Module JSON meta-data (added by MakeMaker)

lib/App/Module/Template.pm  view on Meta::CPAN

    run
    _get_config
    _get_config_path
    _get_module_dirs
    _get_module_fqfn
    _get_template_path
    _module_path_exists
    _process_dirs
    _process_file
    _process_template
    _validate_module_name
);
%EXPORT_TAGS = (
    ALL => [ @EXPORT_OK ],
);

#-------------------------------------------------------------------------------
sub run {
    my $class = shift;

    my %opt;

lib/App/Module/Template.pm  view on Meta::CPAN

        croak "-m <Module::Name> is required. exiting...\n";
    }

    my $module   = $opt{m};
    my $dist     = $module; $dist =~ s/::/-/gmsx;
    my $file     = $module; $file =~ s/.*:://msx; $file .= '.pm';
    my $dist_dir = File::Spec->catdir( File::Spec->curdir, $dist );
    my $tmpl_vars;

    try {
        _validate_module_name($module);
    } catch {
        croak "$_ module-template. exiting...";
    };

    if ( _module_path_exists($dist_dir) ) {
        croak "Destination directory $dist_dir exists. exiting...";
    }

    my $template_dir = _get_template_path($opt{t});

lib/App/Module/Template.pm  view on Meta::CPAN

    return $template;
}

#-------------------------------------------------------------------------------
# Validate the module naming convention
#
# 1. No top-level namespaces
# 2. No all lower case names
# 3. Match XXX::XXX
#-------------------------------------------------------------------------------
sub _validate_module_name {
    my ($module_name) = @_;

    given ( $module_name ) {
        when ( $module_name =~ m/\A[A-Za-z]+\z/msx )
        {
            croak "'$module_name' is a top-level namespace";
        }
        when ( $module_name =~ m/\A[a-z]+\:\:[a-z]+/msx )
        {
            croak "'$module_name' is an all lower-case namespace";

t/validate_module_name.t  view on Meta::CPAN

#!perl

use strict;
use warnings;

use Test::More tests => 17;
use Test::Exception;

use_ok( 'App::Module::Template', '_validate_module_name' );

ok(my $module_name = 'Valid::Module', 'set valid module name');

ok(_validate_module_name($module_name), 'valid module name');

ok($module_name = 'Valid::Module::With::Levels', 'set valid module name');

ok(_validate_module_name($module_name), 'valid module name with many levels');

ok($module_name = 'ALL::CAPS', 'set valid module name');

ok(_validate_module_name($module_name), 'valid module name with all caps');

ok($module_name = 'TopLevel', 'set top-level module name');

throws_ok{ _validate_module_name($module_name) } qr/'$module_name' is a top-level namespace/, 'top-level namespace';

ok($module_name = 'lower::case', 'set lower-case module name');

throws_ok{ _validate_module_name($module_name) } qr/'$module_name' is an all lower-case namespace/, 'lower-case namespace';

ok($module_name = 'all::lower::case', 'set multiple lower case namespaces');

throws_ok{ _validate_module_name($module_name) } qr/'$module_name' is an all lower-case namespace/, 'multiple lower-case namespaces';

ok($module_name = 'Invalid::lowercase', 'set module name with mixed lower-case');

throws_ok{ _validate_module_name($module_name) } qr/'$module_name' does not meet naming requirements/, 'Mixed namespaces with lower-case';

ok($module_name = 'Not:Enough', 'set module name without enough colons');

throws_ok{ _validate_module_name($module_name) } qr/'$module_name' does not meet naming requirements/, 'Module with one colon';



( run in 0.269 second using v1.01-cache-2.11-cpan-4d50c553e7e )