use strict;
use base 'Class::Accessor::Fast';
+use Config;
use File::Spec;
use File::Path;
use IO::File;
$self->{dir} =~ s/\:\:/-/g;
$self->{script} = File::Spec->catdir( $self->{dir}, 'script' );
$self->{appprefix} = Catalyst::Utils::appprefix($name);
- $self->{startperl} = '#!/usr/bin/perl -w';
+ $self->{startperl} = "#!$Config{perlpath} -w";
$self->{scriptgen} = $Catalyst::CATALYST_SCRIPT_GEN || 4;
$self->{author} = $self->{author} = $ENV{'AUTHOR'}
|| eval { @{ [ getpwuid($<) ] }[6] }
|| 'Catalyst developer';
-
+
my $gen_scripts = ( $self->{makefile} ) ? 0 : 1;
- my $gen_makefile = ( $self->{scripts} ) ? 0 : 1;
- my $gen_app = ( $self->{scripts} || $self->{makefile} ) ? 0 : 1;
-
- if ( $gen_app ) {
+ my $gen_makefile = ( $self->{scripts} ) ? 0 : 1;
+ my $gen_app = ( $self->{scripts} || $self->{makefile} ) ? 0 : 1;
+
+ if ($gen_app) {
$self->_mk_dirs;
+ $self->_mk_config;
$self->_mk_appclass;
+ $self->_mk_rootclass;
$self->_mk_readme;
$self->_mk_changes;
$self->_mk_apptest;
$self->_mk_images;
$self->_mk_favicon;
}
- if ( $gen_makefile ) {
+ if ($gen_makefile) {
$self->_mk_makefile;
- }
- if ( $gen_scripts ) {
+ }
+ if ($gen_scripts) {
$self->_mk_cgi;
$self->_mk_fastcgi;
$self->_mk_server;
$self->_mk_test;
$self->_mk_create;
}
- return 1;
+ return $self->{dir};
}
=head3 mk_component
$self->{author} = $self->{author} = $ENV{'AUTHOR'}
|| eval { @{ [ getpwuid($<) ] }[6] }
|| 'A clever guy';
- $self->{base} = File::Spec->catdir( $FindBin::Bin, '..' );
+ $self->{base} ||= File::Spec->catdir( $FindBin::Bin, '..' );
unless ( $_[0] =~ /^(?:model|view|controller)$/i ) {
my $helper = shift;
my @args = @_;
my ( $self, $file, $content ) = @_;
if ( -e $file ) {
print qq/ exists "$file"\n/;
- return 0 unless ( $self->{'.newfiles'}
- || $self->{scripts}
- || $self->{makefile} );
+ return 0
+ unless ( $self->{'.newfiles'}
+ || $self->{scripts}
+ || $self->{makefile} );
if ( $self->{'.newfiles'} ) {
if ( my $f = IO::File->new("< $file") ) {
my $oldcontent = join( '', (<$f>) );
$self->{c} = File::Spec->catdir( $self->{mod}, 'Controller' );
$self->mk_dir( $self->{c} );
}
+ my $name = $self->{name};
+ $self->{rootname} =
+ $self->{short} ? "$name\::C::Root" : "$name\::Controller::Root";
$self->{base} = File::Spec->rel2abs( $self->{dir} );
}
$self->render_file( 'appclass', "$mod.pm" );
}
+sub _mk_rootclass {
+ my $self = shift;
+ $self->render_file( 'rootclass',
+ File::Spec->catfile( $self->{c}, "Root.pm" ) );
+}
+
sub _mk_makefile {
my $self = shift;
$self->{path} = File::Spec->catfile( 'lib', split( '::', $self->{name} ) );
$self->{path} .= '.pm';
my $dir = $self->{dir};
$self->render_file( 'makefile', "$dir\/Makefile.PL" );
+
+ if ( $self->{makefile} ) {
+
+ # deprecate the old Build.PL file when regenerating Makefile.PL
+ $self->_deprecate_file(
+ File::Spec->catdir( $self->{dir}, 'Build.PL' ) );
+ }
+}
+
+sub _mk_config {
+ my $self = shift;
+ my $dir = $self->{dir};
+ my $appprefix = $self->{appprefix};
+ $self->render_file( 'config',
+ File::Spec->catfile( $dir, "$appprefix.yml" ) );
}
sub _mk_readme {
}
+sub _deprecate_file {
+ my ( $self, $file ) = @_;
+ if ( -e $file ) {
+ my $oldcontent;
+ if ( my $f = IO::File->new("< $file") ) {
+ $oldcontent = join( '', (<$f>) );
+ }
+ my $newfile = $file . '.deprecated';
+ if ( my $f = IO::File->new("> $newfile") ) {
+ binmode $f;
+ print $f $oldcontent;
+ print qq/created "$newfile"\n/;
+ unlink $file;
+ print qq/removed "$file"\n/;
+ return 1;
+ }
+ Catalyst::Exception->throw(
+ message => qq/Couldn't create "$file", "$!"/ );
+ }
+}
+
=head1 HELPERS
Helpers are classes that provide two methods.
# Set flags and add plugins for the application
#
# -Debug: activates the debug mode for very useful log messages
-# Static::Simple: will serve static files from the applications root directory
+# Static::Simple: will serve static files from the application's root
+# directory
#
-use Catalyst qw/-Debug Static::Simple/;
+use Catalyst qw/-Debug ConfigLoader Static::Simple/;
our $VERSION = '0.01';
#
-# Configure the application
+# Start the application
#
-__PACKAGE__->config( name => '[% name %]' );
+__PACKAGE__->setup;
#
-# Start the application
+# IMPORTANT: Please look into [% rootname %] for more
#
-__PACKAGE__->setup;
=head1 NAME
Catalyst based application.
+=head1 SEE ALSO
+
+L<[% rootname %]>, L<Catalyst>
+
+=head1 AUTHOR
+
+[% author %]
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
+__rootclass__
+package [% rootname %];
+
+use strict;
+use warnings;
+use base 'Catalyst::Controller';
+
+#
+# Sets the actions in this controller to be registered with no prefix
+# so they function identically to actions created in MyApp.pm
+#
+__PACKAGE__->config->{namespace} = '';
+
+=head1 NAME
+
+[% rootname %] - Root Controller for this Catalyst based application
+
+=head1 SYNOPSIS
+
+See L<[% name %]>.
+
+=head1 DESCRIPTION
+
+Root Controller for this Catalyst based application.
+
=head1 METHODS
+=cut
+
=head2 default
=cut
__makefile__
use inc::Module::Install;
-name('[% dir %]');
-abstract('Catalyst Application');
-author('[% author %]');
-version_from('[% path %]');
-license('perl');
+name '[% dir %]';
+all_from '[% path %]';
-requires( Catalyst => '5.57' );
+requires Catalyst => '5.64';
-install_script( glob('script/*.pl') );
+catalyst;
-catalyst_files();
-
-&WriteAll;
+install_script glob('script/*.pl');
+auto_install;
+WriteAll;
+__config__
+---
+name: [% name %]
__readme__
Run script/[% appprefix %]_server.pl to test the application.
__changes__
0.01 [% time %]
- initial revision, generated by Catalyst
__apptest__
+use strict;
+use warnings;
use Test::More tests => 2;
-use_ok( Catalyst::Test, '[% name %]' );
-ok( request('/')->is_success );
+BEGIN { use_ok 'Catalyst::Test', '[% name %]' }
+
+ok( request('/')->is_success, 'Request should succeed' );
__podtest__
+use strict;
+use warnings;
use Test::More;
eval "use Test::Pod 1.14";
all_pod_files_ok();
__podcoveragetest__
+use strict;
+use warnings;
use Test::More;
eval "use Test::Pod::Coverage 1.04";
(requires -listen)
-d -daemon daemonize (requires -listen)
-M -manager specify alternate process manager
- (FCGI::ProcessManager sub-class)
+ (FCGI::ProcManager sub-class)
or empty string to disable
=head1 DESCRIPTION
$ENV{CATALYST_DEBUG} = 1;
}
+# This is require instead of use so that the above environment
+# variables can be set at runtime.
require [% name %];
[% name %]->run( $port, $host, {
1;
__comptest__
+use strict;
+use warnings;
[% IF long_type == 'Controller' %]
use Test::More tests => 3;
-use_ok( Catalyst::Test, '[% app %]' );
+use_ok( 'Catalyst::Test', '[% app %]' );
use_ok('[% class %]');
-ok( request('[% uri %]')->is_success );
+ok( request('[% uri %]')->is_success, 'Request should succeed' );
[% ELSE %]
use Test::More tests => 1;
use_ok('[% class %]');