Apache2-WebApp-Toolkit
view release on metacpan or search on metacpan
lib/Apache2/WebApp/Helper/Project.pm view on Meta::CPAN
'apache_doc_root=s',
'apache_domain=s',
'project_title=s',
'project_author=s',
'project_email=s',
'project_version=s',
'config=s',
'source=s',
'rewrite_uri',
'help',
'verbose',
);
if ( $opts{config} ) {
my $config = $self->config->parse( $opts{config} );
@opts{keys %$config} = values %$config;
}
if ( $opts{help} ||
!$opts{apache_doc_root} ||
!$opts{project_title} ) {
print "\033[33mMissing or invalid options\033[0m\n\n";
$self->help;
}
my $project = $opts{project_title};
my $doc_root = $opts{apache_doc_root};
my $source = $opts{source} ||= $self->get_source_path();
my $verbose = $opts{verbose};
print "Building the project...\n" if ($verbose);
$self->error("\033[31m--project_title must be alphanumeric with no spaces\033[0m")
unless ($project =~ /^\w+?$/);
$self->error("\033[31m--apache_doc_root directory selected doesn't exist\033[0m")
unless (-d $doc_root);
$self->error("\033[31m--apache_doc_root directory selected must be empty\033[0m")
if (scalar <$doc_root/*>);
$self->error("\033[31m--source directory selected does not exist\033[0m")
unless (-d $source);
$doc_root =~ s/\/+$//g;
mkpath("$doc_root/app", $verbose, 0755);
mkpath("$doc_root/bin", $verbose, 0755);
mkpath("$doc_root/conf", $verbose, 0755);
mkpath("$doc_root/htdocs", $verbose, 0755);
mkpath("$doc_root/logs", $verbose);
mkpath("$doc_root/templates", $verbose);
mkpath("$doc_root/tmp", $verbose);
mkpath("$doc_root/tmp/cache", $verbose);
mkpath("$doc_root/tmp/cache/templates", $verbose);
mkpath("$doc_root/tmp/uploads", $verbose);
# File::Path ignores default 0777, use chmod instead
chmod 0777, "$doc_root/logs";
chmod 0777, "$doc_root/tmp";
chmod 0777, "$doc_root/tmp/cache";
chmod 0777, "$doc_root/tmp/cache/templates";
chmod 0777, "$doc_root/tmp/uploads";
open (FILE1, ">$doc_root/logs/access_log" ) or $self->error("Cannot open file: $!"); close(FILE1);
open (FILE2, ">$doc_root/logs/error_log" ) or $self->error("Cannot open file: $!"); close(FILE2);
open (FILE3, ">$doc_root/htdocs/favicon.ico") or $self->error("Cannot open file: $!"); close(FILE3);
print "created $doc_root/logs/access_log\n" if ($verbose);
print "created $doc_root/logs/error_log\n" if ($verbose);
print "created $doc_root/htdocs/favicon.ico\n" if ($verbose);
$self->set_vars({
%opts,
package_name => "$project\::Example",
template_name => 'example',
example_uri => 'app/example',
});
$self->write_file("$source/class_pm.tt", "$doc_root/app/$project/Example.pm");
$self->write_file("$source/base_pm.tt", "$doc_root/app/$project/Base.pm" );
$self->write_file("$source/startup_pl.tt", "$doc_root/bin/startup.pl" );
$self->write_file("$source/htpasswd.tt", "$doc_root/conf/htpasswd" );
$self->write_file("$source/webapp_conf.tt", "$doc_root/conf/webapp.conf" );
$self->write_file("$source/httpd_conf.tt", "$doc_root/conf/httpd.conf" );
$self->write_file("$source/index_html.tt", "$doc_root/htdocs/index.html" );
$self->write_file("$source/projrc.tt", "$doc_root/.projrc" );
$self->write_file("$source/template.tt", "$doc_root/templates/example.tt" );
$self->write_file("$source/error.tt", "$doc_root/templates/error.tt" );
chmod 0666, "$doc_root/conf/htpasswd";
print "\033[33mProject '$project' created successfully\033[0m\n";
exit;
}
#----------------------------------------------------------------------------+
# help()
#
# Command-line argument help menu.
sub help {
my $self = shift;
print <<ERR_OUT;
Usage: webapp-project [OPTION...]
WebApp::Helper::Project - Creates the necessary project files and directories
Options:
--config (default) Instead of passing arguments, import these values from a file
--apache_doc_root Absolute path to the project directory
--apache_domain Domain name for your project
--project_title Name of your project (example: Project)
--project_author Full name of the project owner
--project_email E-mail address of the project owner
--project_version Version number of your project
--source Specify a custom source directory (default: /usr/share/webapp-toolkit)
--rewrite_uri Remove the project name from the URI (requires mod_rewrite)
--help List available command line options (this page)
--verbose Print messages to STDOUT
Report bugs to <mbrooks\@cpan.org>
ERR_OUT
exit;
}
1;
__END__
=head1 NAME
Apache2::WebApp::Helper::Project - Command-line helper script
=head1 SYNOPSIS
use Apache2::WebApp::Helper::Project;
my $obj = Apache2::WebApp::Helper::Project->new;
$obj->process;
=head1 DESCRIPTION
( run in 1.555 second using v1.01-cache-2.11-cpan-5b529ec07f3 )