App-Module-Template
view release on metacpan or search on metacpan
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 )