X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FHelper.pm;h=2af57d04453f5f0ab4a7629810c26619784e7c82;hb=58e9ce65718ef828fbec4a5a3afa713c95ef4c6f;hp=14d95da66ff20dd4256b8e87bb03c01f984abcb0;hpb=28e68b83d04a994849d734d5fe3d978ea47cf113;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Helper.pm b/lib/Catalyst/Helper.pm index 14d95da..2af57d0 100644 --- a/lib/Catalyst/Helper.pm +++ b/lib/Catalyst/Helper.pm @@ -9,6 +9,7 @@ use IO::File; use FindBin; use Template; use Catalyst; +use Catalyst::Exception; my %cache; @@ -63,10 +64,10 @@ sub mk_app { $self->{appprefix} = lc $self->{dir}; $self->{appprefix} =~ s/-/_/g; $self->{startperl} = $Config{startperl}; - $self->{scriptgen} = $Catalyst::CATALYST_SCRIPT_GEN; + $self->{scriptgen} = $Catalyst::CATALYST_SCRIPT_GEN || 4; $self->{author} = $self->{author} = $ENV{'AUTHOR'} || eval { @{ [ getpwuid($<) ] }[6] } - || 'A clever guy'; + || 'Catalyst developer'; $self->_mk_dirs; $self->_mk_appclass; $self->_mk_build; @@ -97,12 +98,18 @@ sub mk_component { || 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|m|view|v|controller|c)$/i ) { my $helper = shift; my @args = @_; my $class = "Catalyst::Helper::$helper"; eval "require $class"; - die qq/Couldn't load helper "$class", "$@"/ if $@; + + if ( $@ ) { + Catalyst::Exception->throw( + message => qq/Couldn't load helper "$class", "$@"/ + ); + } + if ( $class->can('mk_stuff') ) { return 1 unless $class->mk_stuff( $self, @args ); } @@ -145,7 +152,13 @@ sub mk_component { $comp = 'Controller' if $type eq 'C'; my $class = "Catalyst::Helper::$comp\::$helper"; eval "require $class"; - die qq/Couldn't load helper "$class", "$@"/ if $@; + + if ( $@ ) { + Catalyst::Exception->throw( + message => qq/Couldn't load helper "$class", "$@"/ + ); + } + if ( $class->can('mk_compclass') ) { return 1 unless $class->mk_compclass( $self, @args ); } @@ -178,11 +191,14 @@ sub mk_dir { print qq/ exists "$dir"\n/; return 0; } - if ( mkpath $dir) { + if ( mkpath [$dir] ) { print qq/created "$dir"\n/; return 1; } - die qq/Couldn't create "$dir", "$!"/; + + Catalyst::Exception->throw( + message => qq/Couldn't create "$dir", "$!"/ + ); } =head3 mk_file @@ -195,14 +211,22 @@ sub mk_file { my ( $self, $file, $content ) = @_; if ( -e $file ) { print qq/ exists "$file"\n/; - return 0; + return 0 unless $self->{'.newfiles'}; + if ( my $f = IO::File->new("< $file") ) { + my $oldcontent = join('', (<$f>)); + return 0 if $content eq $oldcontent; + } + $file .= '.new'; } if ( my $f = IO::File->new("> $file") ) { print $f $content; print qq/created "$file"\n/; return 1; } - die qq/Couldn't create "$file", "$!"/; + + Catalyst::Exception->throw( + message => qq/Couldn't create "$file", "$!"/ + ); } =head3 next_test @@ -215,13 +239,16 @@ sub next_test { else { my $name = $self->{name}; my $prefix = $name; - $prefix =~ s/::/_/g; - $prefix = lc $prefix; + $prefix =~ s/::/-/g; + $prefix = $prefix; $tname = $prefix . '.t'; $self->{prefix} = $prefix; + $prefix = lc $prefix; + $prefix =~ s/-/\//g; + $self->{uri} = $prefix; } my $dir = $self->{test_dir}; - my $type = lc $self->{type}; + my $type = $self->{type}; return File::Spec->catfile( $dir, $type, $tname ); } @@ -254,9 +281,9 @@ sub _mk_dirs { $self->mk_dir( $self->{root} ); $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' ) ); + $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' ) ); $self->{class} = File::Spec->catdir( split( /\:\:/, $self->{name} ) ); $self->{mod} = File::Spec->catdir( $self->{lib}, $self->{class} ); $self->mk_dir( $self->{mod} ); @@ -396,7 +423,7 @@ Sebastian Riedel, C =head1 LICENSE -This library is free software . You can redistribute it and/or modify +This library is free software . You can redistribute it and/or modify it under the same terms as perl itself. =cut @@ -416,22 +443,32 @@ our $VERSION = '0.01'; [% name %]->setup; -sub default : Private { - my ( $self, $c ) = @_; - $c->res->output('Congratulations, [% name %] is on Catalyst!'); -} - =head1 NAME -[% name %] - A very nice application +[% name %] - Catalyst based application =head1 SYNOPSIS - Very simple to use + script/[% appprefix %]_server.pl =head1 DESCRIPTION -Very nice application. +Catalyst based application. + +=head1 METHODS + +=over 4 + +=item default + +=cut + +sub default : Private { + my ( $self, $c ) = @_; + $c->res->output('Congratulations, [% name %] is on Catalyst!'); +} + +=back =head1 AUTHOR @@ -439,13 +476,12 @@ Very nice application. =head1 LICENSE -This library is free software . You can redistribute it and/or modify +This library is free software . You can redistribute it and/or modify it under the same terms as perl itself. =cut 1; - __makefile__ unless ( eval "use Module::Build::Compat 0.02; 1" ) { print "This module requires Module::Build to install itself.\n"; @@ -476,7 +512,6 @@ __makefile__ Module::Build::Compat->run_build_pl( args => \@ARGV ); require Module::Build; Module::Build::Compat->write_makefile( build_class => 'Module::Build' ); - __build__ use strict; use Catalyst::Build; @@ -491,22 +526,17 @@ my $build = Catalyst::Build->new( test_files => [ glob('t/*.t'), glob('t/*/*.t') ] ); $build->create_build_script; - __readme__ -Run script/[% apprefix %]_server.pl to test the application. - +Run script/[% appprefix %]_server.pl to test the application. __changes__ This file documents the revision history for Perl extension [% name %]. - 0.01 [% time %] - initial revision, generated by Catalyst - __apptest__ use Test::More tests => 2; use_ok( Catalyst::Test, '[% name %]' ); ok( request('/')->is_success ); - __podtest__ use Test::More; @@ -515,7 +545,6 @@ plan skip_all => 'Test::Pod 1.14 required' if $@; plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; all_pod_files_ok(); - __podcoveragetest__ use Test::More; @@ -524,10 +553,10 @@ plan skip_all => 'Test::Pod::Coverage 1.04 required' if $@; plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; all_pod_coverage_ok(); - __cgi__ [% startperl %] -w -BEGIN { $ENV{CATALYST_ENGINE} = 'CGI' } + +BEGIN { $ENV{CATALYST_ENGINE} ||= 'CGI' } use strict; use FindBin; @@ -540,7 +569,7 @@ use [% name %]; =head1 NAME -cgi - Catalyst CGI +[% appprefix %]_cgi.pl - Catalyst CGI =head1 SYNOPSIS @@ -558,15 +587,14 @@ Sebastian Riedel, C Copyright 2004 Sebastian Riedel. All rights reserved. -This library is free software. You can redistribute it and/or modify +This library is free software. You can redistribute it and/or modify it under the same terms as perl itself. =cut - __fastcgi__ [% startperl %] -w -BEGIN { $ENV{CATALYST_ENGINE} = 'FastCGI' } +BEGIN { $ENV{CATALYST_ENGINE} ||= 'FastCGI' } use strict; use FindBin; @@ -579,7 +607,7 @@ use [% name %]; =head1 NAME -fastcgi - Catalyst FastCGI +[% appprefix %]_fastcgi.pl - Catalyst FastCGI =head1 SYNOPSIS @@ -597,16 +625,15 @@ Sebastian Riedel, C Copyright 2004 Sebastian Riedel. All rights reserved. -This library is free software. You can redistribute it and/or modify +This library is free software. You can redistribute it and/or modify it under the same terms as perl itself. =cut - __server__ [% startperl %] -w BEGIN { - $ENV{CATALYST_ENGINE} = 'HTTP'; + $ENV{CATALYST_ENGINE} ||= 'HTTP'; $ENV{CATALYST_SCRIPT_GEN} = [% scriptgen %]; } @@ -630,11 +657,11 @@ pod2usage(1) if $help; =head1 NAME -server - Catalyst Testserver +[% appprefix %]_server.pl - Catalyst Testserver =head1 SYNOPSIS -server.pl [options] +[% appprefix %]_server.pl [options] Options: -? -help display this help and exits @@ -656,15 +683,14 @@ Sebastian Riedel, C Copyright 2004 Sebastian Riedel. All rights reserved. -This library is free software. You can redistribute it and/or modify +This library is free software. You can redistribute it and/or modify it under the same terms as perl itself. =cut - __test__ [% startperl %] -w -BEGIN { $ENV{CATALYST_ENGINE} = 'Test' } +BEGIN { $ENV{CATALYST_ENGINE} ||= 'Test' } use strict; use Getopt::Long; @@ -685,18 +711,18 @@ print [% name %]->run($ARGV[0])->content . "\n"; =head1 NAME -test - Catalyst Test +[% appprefix %]_test.pl - Catalyst Test =head1 SYNOPSIS -test.pl [options] uri +[% appprefix %]_test.pl [options] uri Options: -help display this help and exits Examples: - test.pl http://localhost/some_action - test.pl /some_action + [% appprefix %]_test.pl http://localhost/some_action + [% appprefix %]_test.pl /some_action See also: perldoc Catalyst::Manual @@ -714,11 +740,10 @@ Sebastian Riedel, C Copyright 2004 Sebastian Riedel. All rights reserved. -This library is free software. You can redistribute it and/or modify +This library is free software. You can redistribute it and/or modify it under the same terms as perl itself. =cut - __create__ [% startperl %] -w @@ -728,36 +753,38 @@ use Pod::Usage; use Catalyst::Helper; my $help = 0; +my $nonew = 0; -GetOptions( 'help|?' => \$help ); +GetOptions( 'help|?' => \$help, + 'nonew' => \$nonew ); pod2usage(1) if ( $help || !$ARGV[0] ); -my $helper = Catalyst::Helper->new; +my $helper = Catalyst::Helper->new({'.newfiles' => !$nonew}); pod2usage(1) unless $helper->mk_component( '[% name %]', @ARGV ); 1; =head1 NAME -create - Create a new Catalyst Component +[% appprefix %]_create.pl - Create a new Catalyst Component =head1 SYNOPSIS -create.pl [options] model|view|controller name [helper] [options] +[% 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 Examples: - create.pl controller My::Controller - create.pl view My::View - create.pl view MyView TT - create.pl view TT TT - create.pl model My::Model - create.pl model SomeDB CDBI dbi:SQLite:/tmp/my.db - create.pl model AnotherDB CDBI dbi:Pg:dbname=foo root 4321 - create.pl Ajax + [% appprefix %]_create.pl controller My::Controller + [% appprefix %]_create.pl view My::View + [% appprefix %]_create.pl view MyView TT + [% appprefix %]_create.pl view TT TT + [% appprefix %]_create.pl model My::Model + [% appprefix %]_create.pl model SomeDB CDBI dbi:SQLite:/tmp/my.db + [% appprefix %]_create.pl model AnotherDB CDBI dbi:Pg:dbname=foo root 4321 See also: perldoc Catalyst::Manual @@ -767,6 +794,10 @@ create.pl [options] model|view|controller name [helper] [options] Create a new Catalyst Component. +Existing component files are not overwritten. If any of the component files +to be created already exist the file will be written with a '.new' suffix. +This behaviour can be supressed with the C<-nonew> option. + =head1 AUTHOR Sebastian Riedel, C @@ -775,56 +806,63 @@ Sebastian Riedel, C Copyright 2004 Sebastian Riedel. All rights reserved. -This library is free software. You can redistribute it and/or modify +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'; -[% IF type == 'C' %] -sub default : Private { - my ( $self, $c ) = @_; - $c->res->output('Congratulations, [% class %] is on Catalyst!'); -} - -[% END %] =head1 NAME -[% class %] - A Component +[% class %] - Catalyst component =head1 SYNOPSIS - Very simple to use +See L<[% app %]> =head1 DESCRIPTION -Very nice component. +Catalyst component. +[% IF type == 'C' %] +=head1 METHODS + +=over 4 + +=item default + +=cut + +sub default : Private { + my ( $self, $c ) = @_; + $c->res->output('Congratulations, [% class %] is on Catalyst!'); +} +=back + +[% END %] =head1 AUTHOR [%author%] =head1 LICENSE -This library is free software . You can redistribute it and/or modify +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' %] use Test::More tests => 3; use_ok( Catalyst::Test, '[% app %]' ); use_ok('[% class %]'); -ok( request('[% prefix %]')->is_success ); +ok( request('[% uri %]')->is_success ); [% ELSE %] use Test::More tests => 1; use_ok('[% class %]');