Updated helper for Root class
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Helper.pm
index 6aa714c..1838b7a 100644 (file)
@@ -2,6 +2,7 @@ package Catalyst::Helper;
 
 use strict;
 use base 'Class::Accessor::Fast';
+use Config;
 use File::Spec;
 use File::Path;
 use IO::File;
@@ -69,36 +70,38 @@ sub mk_app {
     $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
@@ -115,7 +118,7 @@ sub 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   = @_;
@@ -228,9 +231,10 @@ sub mk_file {
     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>) );
@@ -328,6 +332,9 @@ sub _mk_dirs {
         $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} );
 }
 
@@ -337,19 +344,33 @@ sub _mk_appclass {
     $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' )
-        );
-    }    
+        $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 {
@@ -452,7 +473,6 @@ sub _deprecate_file {
     my ( $self, $file ) = @_;
     if ( -e $file ) {
         my $oldcontent;
-        print qq/ deprecating "$file"\n/;
         if ( my $f = IO::File->new("< $file") ) {
             $oldcontent = join( '', (<$f>) );
         }
@@ -465,10 +485,10 @@ sub _deprecate_file {
             print qq/removed "$file"\n/;
             return 1;
         }
-        Catalyst::Exception->throw( 
+        Catalyst::Exception->throw(
             message => qq/Couldn't create "$file", "$!"/ );
     }
-}    
+}
 
 =head1 HELPERS
 
@@ -524,21 +544,21 @@ use warnings;
 # 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
 
@@ -552,8 +572,51 @@ __PACKAGE__->setup;
 
 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
@@ -597,19 +660,19 @@ it under the same terms as Perl itself.
 __makefile__
 use inc::Module::Install;
 
-name('[% dir %]');
-abstract('Catalyst Application');
-author('[% author %]');
-version_from('[% path %]');
-license('perl');
-
-requires( Catalyst => '5.57' );
+name '[% dir %]';
+all_from '[% path %]';
 
-install_script( glob('script/*.pl') );
+requires Catalyst => '5.64';
 
-catalyst_files();
+catalyst;
 
-&WriteAll;
+install_script glob('script/*.pl');
+auto_install;
+WriteAll;
+__config__
+---
+name: [% name %]
 __readme__
 Run script/[% appprefix %]_server.pl to test the application.
 __changes__
@@ -618,11 +681,16 @@ This file documents the revision history for Perl extension [% name %].
 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";
@@ -631,6 +699,8 @@ plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD};
 
 all_pod_files_ok();
 __podcoveragetest__
+use strict;
+use warnings;
 use Test::More;
 
 eval "use Test::Pod::Coverage 1.04";
@@ -734,7 +804,7 @@ pod2usage(1) if $help;
                  (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
@@ -800,6 +870,8 @@ if ( $debug ) {
     $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, {
@@ -1031,12 +1103,14 @@ it under the same terms as Perl itself.
 
 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 %]');