BEGIN {
$Poet::App::Command::new::VERSION
=
'0.13'
;
}
has
'app_name'
=> (
isa
=>
'Poet::Types::AppName'
,
is
=>
'rw'
,
traits
=> [
'NoGetopt'
] );
has
'dir'
=> (
isa
=>
'Str'
,
traits
=> [
'Getopt'
],
cmd_aliases
=>
'd'
,
lazy_build
=> 1,
documentation
=>
'Directory to create; will adapt from app-name if ommitted'
);
has
'quiet'
=> (
isa
=>
'Bool'
,
traits
=> [
'Getopt'
],
cmd_aliases
=>
'q'
,
documentation
=>
'Suppress most messages'
);
my
$description
= 'Generates a new Poet environment
for
an app
with
the provided name, which
should be suitable
for
use
in Perl classnames (e.g.
"MyFirstApp"
). If not
provided, a directory is chosen by lowercasing and underscoring the app
name.
% poet new MyApp
my_app/.poet_root
my_app/bin/app.psgi
my_app/bin/get.pl
...
Now run \'my_app/bin/run.pl\' to start your server.
Options:';
method abstract () {
"Create a new Poet installation"
}
method description () {
$description
}
method usage_desc () {
"poet new [-d dir] [-q] <AppName>"
}
method _build_dir () {
return
$self
->app_name_to_dir(
$self
->app_name );
}
method app_name_to_dir (
$app_name
) {
my
$dir
;
if
(
$app_name
=~ /^[A-Z]+$/ ) {
$dir
=
lc
(
$app_name
);
}
else
{
$dir
=
lcfirst
(
$app_name
);
$dir
=~ s/([A-Z])/
"_"
.
lc
($1)/ge;
}
return
$dir
;
}
method execute (
$opt
,
$args
) {
$self
->usage_error(
"takes one argument (app name)"
)
unless
@$args
== 1;
my
$app_name
=
ucfirst
(
$args
->[0] );
$app_name
=~ s/_([a-z])/
uc
($1)/ge;
$self
->app_name(
$app_name
);
Poet::Environment::Generator->generate_environment_directory(
root_dir
=>
$self
->dir,
app_name
=>
$self
->app_name,
quiet
=>
$self
->quiet
);
}
1;