use FindBin;
use Template;
use Catalyst;
+use Catalyst::Utils;
use Catalyst::Exception;
my %cache;
$self->{name} = $name;
$self->{dir} = $name;
$self->{dir} =~ s/\:\:/-/g;
- $self->{appprefix} = lc $self->{dir};
- $self->{appprefix} =~ s/-/_/g;
+ $self->{script} = File::Spec->catdir( $self->{dir}, 'script' );
+ $self->{appprefix} = Catalyst::Utils::appprefix($name);
$self->{startperl} = $Config{startperl};
$self->{scriptgen} = $Catalyst::CATALYST_SCRIPT_GEN || 4;
$self->{author} = $self->{author} = $ENV{'AUTHOR'}
|| eval { @{ [ getpwuid($<) ] }[6] }
|| 'Catalyst developer';
- $self->_mk_dirs;
- $self->_mk_appclass;
- $self->_mk_build;
- $self->_mk_makefile;
- $self->_mk_readme;
- $self->_mk_changes;
- $self->_mk_apptest;
+
+ unless ( $self->{scripts} ) {
+ $self->_mk_dirs;
+ $self->_mk_appclass;
+ $self->_mk_build;
+ $self->_mk_makefile;
+ $self->_mk_readme;
+ $self->_mk_changes;
+ $self->_mk_apptest;
+ $self->_mk_images;
+ $self->_mk_favicon;
+ }
$self->_mk_cgi;
$self->_mk_fastcgi;
$self->_mk_server;
$self->_mk_test;
$self->_mk_create;
- $self->_mk_images;
- $self->_mk_favicon;
return 1;
}
|| eval { @{ [ getpwuid($<) ] }[6] }
|| 'A clever guy';
$self->{base} = File::Spec->catdir( $FindBin::Bin, '..' );
- unless ( $_[0] =~ /^(?:model|m|view|v|controller|c)$/i ) {
+ unless ( $_[0] =~ /^(?:model|view|controller)$/i ) {
my $helper = shift;
my @args = @_;
my $class = "Catalyst::Helper::$helper";
my $helper = shift;
my @args = @_;
return 0 if $name =~ /[^\w\:]/;
- $type = 'M' if $type =~ /model|m/i;
- $type = 'V' if $type =~ /view|v/i;
- $type = 'C' if $type =~ /controller|c/i;
- $self->{type} = $type;
- $self->{name} = $name;
- $self->{class} = "$app\::$type\::$name";
+ $type = lc $type;
+ $self->{long_type} = ucfirst $type;
+ $type = 'M' if $type =~ /model/i;
+ $type = 'V' if $type =~ /view/i;
+ $type = 'C' if $type =~ /controller/i;
+ $type = $self->{long_type} unless $self->{short};
+ $self->{type} = $type;
+ $self->{name} = $name;
+ $self->{class} = "$app\::$type\::$name";
# Class
my $appdir = File::Spec->catdir( split /\:\:/, $app );
my @path = split /\:\:/, $name;
$file = pop @path;
$path = File::Spec->catdir( $path, @path );
- mkpath [$path];
}
+ $self->mk_dir($path);
$file = File::Spec->catfile( $path, "$file.pm" );
$self->{file} = $file;
# Helper
if ($helper) {
- my $comp = 'Model';
- $comp = 'View' if $type eq 'V';
- $comp = 'Controller' if $type eq 'C';
+ my $comp = $self->{long_type};
my $class = "Catalyst::Helper::$comp\::$helper";
eval "require $class";
my ( $self, $file, $content ) = @_;
if ( -e $file ) {
print qq/ exists "$file"\n/;
- return 0 unless $self->{'.newfiles'};
- if ( my $f = IO::File->new("< $file") ) {
- my $oldcontent = join( '', (<$f>) );
- return 0 if $content eq $oldcontent;
+ return 0 unless ( $self->{'.newfiles'} || $self->{scripts} );
+ if ( $self->{'.newfiles'} ) {
+ if ( my $f = IO::File->new("< $file") ) {
+ my $oldcontent = join( '', (<$f>) );
+ return 0 if $content eq $oldcontent;
+ }
+ $file .= '.new';
}
- $file .= '.new';
}
if ( my $f = IO::File->new("> $file") ) {
binmode $f;
}
my $dir = $self->{test_dir};
my $type = $self->{type};
- return File::Spec->catfile( $dir, $type, $tname );
+ $dir = File::Spec->catdir( $dir, $type );
+ $self->mk_dir($dir);
+ return File::Spec->catfile( $dir, $tname );
}
=head3 render_file
sub _mk_dirs {
my $self = shift;
$self->mk_dir( $self->{dir} );
- $self->{script} = File::Spec->catdir( $self->{dir}, 'script' );
$self->mk_dir( $self->{script} );
$self->{lib} = File::Spec->catdir( $self->{dir}, 'lib' );
$self->mk_dir( $self->{lib} );
$self->mk_dir( $self->{images} );
$self->{t} = File::Spec->catdir( $self->{dir}, 't' );
$self->mk_dir( $self->{t} );
- $self->mk_dir( File::Spec->catdir( $self->{t}, 'M' ) );
- $self->mk_dir( File::Spec->catdir( $self->{t}, 'V' ) );
- $self->mk_dir( File::Spec->catdir( $self->{t}, 'C' ) );
+
+ if ( $self->{short} ) {
+ $self->mk_dir( File::Spec->catdir( $self->{t}, 'M' ) );
+ $self->mk_dir( File::Spec->catdir( $self->{t}, 'V' ) );
+ $self->mk_dir( File::Spec->catdir( $self->{t}, 'C' ) );
+ }
+ else {
+ $self->mk_dir( File::Spec->catdir( $self->{t}, 'Model' ) );
+ $self->mk_dir( File::Spec->catdir( $self->{t}, 'View' ) );
+ $self->mk_dir( File::Spec->catdir( $self->{t}, 'Controller' ) );
+ }
+
$self->{class} = File::Spec->catdir( split( /\:\:/, $self->{name} ) );
$self->{mod} = File::Spec->catdir( $self->{lib}, $self->{class} );
$self->mk_dir( $self->{mod} );
- $self->{m} = File::Spec->catdir( $self->{mod}, 'M' );
- $self->mk_dir( $self->{m} );
- $self->{v} = File::Spec->catdir( $self->{mod}, 'V' );
- $self->mk_dir( $self->{v} );
- $self->{c} = File::Spec->catdir( $self->{mod}, 'C' );
- $self->mk_dir( $self->{c} );
+
+ if ( $self->{short} ) {
+ $self->{m} = File::Spec->catdir( $self->{mod}, 'M' );
+ $self->mk_dir( $self->{m} );
+ $self->{v} = File::Spec->catdir( $self->{mod}, 'V' );
+ $self->mk_dir( $self->{v} );
+ $self->{c} = File::Spec->catdir( $self->{mod}, 'C' );
+ $self->mk_dir( $self->{c} );
+ }
+ else {
+ $self->{m} = File::Spec->catdir( $self->{mod}, 'Model' );
+ $self->mk_dir( $self->{m} );
+ $self->{v} = File::Spec->catdir( $self->{mod}, 'View' );
+ $self->mk_dir( $self->{v} );
+ $self->{c} = File::Spec->catdir( $self->{mod}, 'Controller' );
+ $self->mk_dir( $self->{c} );
+ }
$self->{base} = File::Spec->rel2abs( $self->{dir} );
}
=head1 LICENSE
-This library is free software . You can redistribute it and/or modify
-it under the same terms as perl itself.
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
=cut
package [% name %];
use strict;
+use warnings;
-# -Debug activates the debug mode for very useful log messages
-# Static::Simple will serve static files from the root directory
+#
+# 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
+#
use Catalyst qw/-Debug Static::Simple/;
our $VERSION = '0.01';
+#
# Configure the application
-[% name %]->config( name => '[% name %]' );
+#
+__PACKAGE__->config( name => '[% name %]' );
+#
# Start the application
-[% name %]->setup;
+#
+__PACKAGE__->setup;
=head1 NAME
=cut
+#
# Output a friendly welcome message
+#
sub default : Private {
my ( $self, $c ) = @_;
$c->response->body( $c->welcome_message );
}
-# Uncomment and modify this end action after adding a View class
+#
+# Uncomment and modify this end action after adding a View component
+#
#=item end
#
#=cut
# my ( $self, $c ) = @_;
#
# # Forward to View unless response body is already defined
-# $c->forward('MyApp::V::') unless $c->response->body;
+# $c->forward('View::') unless $c->response->body;
#}
=back
=head1 LICENSE
-This library is free software . You can redistribute it and/or modify
-it under the same terms as perl itself.
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
=cut
create_makefile_pl => 'passthrough',
license => 'perl',
module_name => '[% name %]',
- requires => { Catalyst => '5.10' },
+ requires => { Catalyst => '5.49' },
create_makefile_pl => 'passthrough',
script_files => [ glob('script/*') ],
test_files => [ glob('t/*.t'), glob('t/*/*.t') ]
Copyright 2004 Sebastian Riedel. All rights reserved.
-This library is free software. You can redistribute it and/or modify
-it under the same terms as perl itself.
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
=cut
__fastcgi__
BEGIN { $ENV{CATALYST_ENGINE} ||= 'FastCGI' }
use strict;
+use Getopt::Long;
+use Pod::Usage;
use FindBin;
use lib "$FindBin::Bin/../lib";
use [% name %];
-[% name %]->run;
+my $help = 0;
+my ( $listen, $nproc );
+
+GetOptions(
+ 'help|?' => \$help,
+ 'listen|l=s' => \$listen,
+ 'nproc|n=i' => \$nproc,
+);
+
+pod2usage(1) if $help;
+
+[% name %]->run( $listen, { nproc => $nproc } );
1;
=head1 SYNOPSIS
-See L<Catalyst::Manual>
+[% appprefix %]_fastcgi.pl [options]
+
+ Options:
+ -? -help display this help and exits
+ -l -listen Socket path to listen on
+ (defaults to standard input)
+ can be HOST:PORT, :PORT or a
+ filesystem path
+ -n -nproc specify number of processes to keep
+ to serve requests (defaults to 1)
=head1 DESCRIPTION
Copyright 2004 Sebastian Riedel. All rights reserved.
-This library is free software. You can redistribute it and/or modify
-it under the same terms as perl itself.
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
=cut
__server__
use Pod::Usage;
use FindBin;
use lib "$FindBin::Bin/../lib";
-use [% name %];
+my $debug = 0;
my $fork = 0;
my $help = 0;
my $host = undef;
my @argv = @ARGV;
GetOptions(
+ 'debug|d' => \$debug,
'fork' => \$fork,
'help|?' => \$help,
'host=s' => \$host,
pod2usage(1) if $help;
+if ( $restart ) {
+ $ENV{CATALYST_ENGINE} = 'HTTP::Restarter';
+}
+if ( $debug ) {
+ $ENV{CATALYST_DEBUG} = 1;
+}
+
+require [% name %];
+
[% name %]->run( $port, $host, {
argv => \@argv,
'fork' => $fork,
[% appprefix %]_server.pl [options]
Options:
+ -d -debug force debug mode
-f -fork handle each request in a new process
(defaults to false)
-? -help display this help and exits
Copyright 2004 Sebastian Riedel. All rights reserved.
-This library is free software. You can redistribute it and/or modify
-it under the same terms as perl itself.
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
=cut
__test__
Copyright 2004 Sebastian Riedel. All rights reserved.
-This library is free software. You can redistribute it and/or modify
-it under the same terms as perl itself.
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
=cut
__create__
my $help = 0;
my $nonew = 0;
+my $short = 0;
-GetOptions( 'help|?' => \$help,
- 'nonew' => \$nonew );
+GetOptions(
+ 'help|?' => \$help,
+ 'nonew' => \$nonew,
+ 'short' => \$short
+ );
pod2usage(1) if ( $help || !$ARGV[0] );
-my $helper = Catalyst::Helper->new({'.newfiles' => !$nonew});
+my $helper =
+ Catalyst::Helper->new( { '.newfiles' => !$nonew, short => $short } );
+
pod2usage(1) unless $helper->mk_component( '[% name %]', @ARGV );
1;
[% appprefix %]_create.pl [options] model|view|controller name [helper] [options]
Options:
- -help display this help and exits
- -nonew don't create a .new file where a file to be created exists
+ -help display this help and exits
+ -nonew don't create a .new file where a file to be created exists
+ -short use short types, like C instead of Controller...
Examples:
[% appprefix %]_create.pl controller My::Controller
Copyright 2004 Sebastian Riedel. All rights reserved.
-This library is free software. You can redistribute it and/or modify
-it under the same terms as perl itself.
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
=cut
__compclass__
package [% class %];
use strict;
-use base 'Catalyst::Base';
+use warnings;
+use base 'Catalyst::[% long_type %]';
=head1 NAME
-[% class %] - Catalyst component
+[% class %] - Catalyst [% long_type %]
=head1 SYNOPSIS
=head1 DESCRIPTION
-Catalyst component.
-[% IF type == 'C' %]
+Catalyst [% long_type %].
+[% IF long_type == 'Controller' %]
=head1 METHODS
=over 4
-# Uncomment, modify and add new actions to fit your needs
+#
+# Uncomment and modify this or add new actions to fit your needs
+#
#=item default
#
#=cut
=head1 LICENSE
-This library is free software . You can redistribute it and/or modify
-it under the same terms as perl itself.
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
=cut
1;
__comptest__
-[% IF type == 'C' %]
+[% IF long_type == 'Controller' %]
use Test::More tests => 3;
use_ok( Catalyst::Test, '[% app %]' );
use_ok('[% class %]');