X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FHelper.pm;h=4ce00710745c7278578a789615f043fef1658438;hb=620dd287c46cbbf331bab2fa244db3008a46b483;hp=c3ea20aee0449b95228a89b81910a447c5e4d322;hpb=f023d4a10db8a87ef3aaf2f479989f2bd6a040b8;p=catagits%2FCatalyst-Devel.git diff --git a/lib/Catalyst/Helper.pm b/lib/Catalyst/Helper.pm index c3ea20a..4ce0071 100644 --- a/lib/Catalyst/Helper.pm +++ b/lib/Catalyst/Helper.pm @@ -1,8 +1,5 @@ package Catalyst::Helper; - -use strict; -use warnings; -use base 'Class::Accessor::Fast'; +use Moose; use Config; use File::Spec; use File::Path; @@ -15,9 +12,8 @@ use Catalyst::Utils; use Catalyst::Exception; use Path::Class qw/dir file/; use File::ShareDir qw/dist_dir/; -use Moose; use aliased 'Path::Class::Dir'; - +use namespace::autoclean; my %cache; @@ -36,8 +32,9 @@ Catalyst::Helper - Bootstrap a Catalyst application sub get_sharedir_file { my ($self, @filename) = @_; my $dist_dir; - if (-d "inc/.author") { # Can't use sharedir if we're in a checkout - # this feels horrible, better ideas? + if (-d "inc/.author" && -f "lib/Catalyst/Helper.pm" + ) { # Can't use sharedir if we're in a checkout + # this feels horrible, better ideas? $dist_dir = 'share'; } else { @@ -242,6 +239,7 @@ sub mk_file { $file .= '.new'; } } + if ( my $f = IO::File->new("> $file") ) { binmode $f; print $f $content; @@ -274,7 +272,7 @@ sub next_test { # Do not touch this method, *EVER*, it is needed for back compat. ## addendum: we had to split this method so we could have backwards -## compatability. otherwise, we'd have no way to pass stuff from __DATA__ +## compatability. otherwise, we'd have no way to pass stuff from __DATA__ sub render_file { my ( $self, $file, $path, $vars ) = @_; @@ -349,12 +347,12 @@ sub _mk_dirs { sub _mk_appclass { my $self = shift; my $mod = $self->{mod}; - $self->render_sharedir_file( 'lib/appclass.tt', "$mod.pm" ); + $self->render_sharedir_file( File::Spec->catfile('lib', 'MyApp.pm.tt'), "$mod.pm" ); } sub _mk_rootclass { my $self = shift; - $self->render_sharedir_file( 'lib/MyApp/Controller/rootclass.tt', + $self->render_sharedir_file( File::Spec->catfile('lib', 'MyApp', 'Controller', 'Root.pm.tt'), File::Spec->catfile( $self->{c}, "Root.pm" ) ); } @@ -363,7 +361,7 @@ sub _mk_makefile { $self->{path} = File::Spec->catfile( 'lib', split( '::', $self->{name} ) ); $self->{path} .= '.pm'; my $dir = $self->{dir}; - $self->render_sharedir_file( 'makefile.tt', "$dir\/Makefile.PL" ); + $self->render_sharedir_file( 'Makefile.PL.tt', "$dir\/Makefile.PL" ); if ( $self->{makefile} ) { @@ -377,36 +375,36 @@ sub _mk_config { my $self = shift; my $dir = $self->{dir}; my $appprefix = $self->{appprefix}; - $self->render_sharedir_file( 'config.tt', + $self->render_sharedir_file( 'myapp.conf.tt', File::Spec->catfile( $dir, "$appprefix.conf" ) ); } sub _mk_readme { my $self = shift; my $dir = $self->{dir}; - $self->render_sharedir_file( 'readme.tt', "$dir\/README" ); + $self->render_sharedir_file( 'README.tt', "$dir\/README" ); } sub _mk_changes { my $self = shift; my $dir = $self->{dir}; my $time = strftime('%Y-%m-%d %H:%M:%S', localtime time); - $self->render_sharedir_file( 'changes.tt', "$dir\/Changes", { time => $time } ); + $self->render_sharedir_file( 'Changes.tt', "$dir\/Changes", { time => $time } ); } sub _mk_apptest { my $self = shift; my $t = $self->{t}; - $self->render_sharedir_file( 't/apptest.tt', "$t\/01app.t" ); - $self->render_sharedir_file( 't/podtest.tt', "$t\/02pod.t" ); - $self->render_sharedir_file( 't/podcoveragetest.tt', "$t\/03podcoverage.t" ); + $self->render_sharedir_file( File::Spec->catfile('t', '01app.t.tt'), "$t\/01app.t" ); + $self->render_sharedir_file( File::Spec->catfile('t', '02pod.t.tt'), "$t\/02pod.t" ); + $self->render_sharedir_file( File::Spec->catfile('t', '03podcoverage.t.tt'), "$t\/03podcoverage.t" ); } sub _mk_cgi { my $self = shift; my $script = $self->{script}; my $appprefix = $self->{appprefix}; - $self->render_sharedir_file( 'script/cgi.tt', "$script\/$appprefix\_cgi.pl" ); + $self->render_sharedir_file( File::Spec->catfile('script', 'myapp_cgi.pl.tt'), "$script\/$appprefix\_cgi.pl" ); chmod 0700, "$script/$appprefix\_cgi.pl"; } @@ -414,7 +412,7 @@ sub _mk_fastcgi { my $self = shift; my $script = $self->{script}; my $appprefix = $self->{appprefix}; - $self->render_sharedir_file( 'script/fastcgi.tt', "$script\/$appprefix\_fastcgi.pl" ); + $self->render_sharedir_file( File::Spec->catfile('script', 'myapp_fastcgi.pl.tt'), "$script\/$appprefix\_fastcgi.pl" ); chmod 0700, "$script/$appprefix\_fastcgi.pl"; } @@ -422,7 +420,7 @@ sub _mk_server { my $self = shift; my $script = $self->{script}; my $appprefix = $self->{appprefix}; - $self->render_sharedir_file( 'script/server.tt', "$script\/$appprefix\_server.pl" ); + $self->render_sharedir_file( File::Spec->catfile('script', 'myapp_server.pl.tt'), "$script\/$appprefix\_server.pl" ); chmod 0700, "$script/$appprefix\_server.pl"; } @@ -430,7 +428,7 @@ sub _mk_test { my $self = shift; my $script = $self->{script}; my $appprefix = $self->{appprefix}; - $self->render_sharedir_file( 'script/test.tt', "$script/$appprefix\_test.pl" ); + $self->render_sharedir_file( File::Spec->catfile('script', 'myapp_test.pl.tt'), "$script/$appprefix\_test.pl" ); chmod 0700, "$script/$appprefix\_test.pl"; } @@ -438,20 +436,20 @@ sub _mk_create { my $self = shift; my $script = $self->{script}; my $appprefix = $self->{appprefix}; - $self->render_sharedir_file( 'script/create.tt', "$script\/$appprefix\_create.pl" ); + $self->render_sharedir_file( File::Spec->catfile('script', 'myapp_create.pl.tt'), "$script\/$appprefix\_create.pl" ); chmod 0700, "$script/$appprefix\_create.pl"; } sub _mk_compclass { my $self = shift; my $file = $self->{file}; - return $self->render_sharedir_file( 'compclass.tt', "$file" ); + return $self->render_sharedir_file( 'lib', 'Helper', 'compclass.tt', "$file" ); } sub _mk_comptest { my $self = shift; my $test = $self->{test}; - $self->render_sharedir_file( 'comptest.tt', "$test" ); + $self->render_sharedir_file( 't', 'comptest.tt', "$test" ); ## wtf do i rename this to? } sub _mk_images { @@ -462,7 +460,7 @@ sub _mk_images { btn_120x50_powered btn_120x50_powered_shadow btn_88x31_built btn_88x31_built_shadow btn_88x31_powered btn_88x31_powered_shadow/; for my $name (@images) { - my $image = $self->get_sharedir_file("root", "$name.png"); + my $image = $self->get_sharedir_file("root", "static", "images", "$name.png.bin"); $self->mk_file( File::Spec->catfile( $images, "$name.png" ), $image ); } } @@ -498,41 +496,6 @@ sub _deprecate_file { } -## this is so you don't have to do make install after every change to test -sub _find_share_dir { - my ($self, $args) = @_; - my $share_name = $self->name; - if ($share_name =~ s!^/(.*?)/!!) { - my $dist = $1; - $args->{share_base_dir} = eval { - Dir->new(File::ShareDir::dist_dir($dist)) - ->subdir('share'); - }; - if ($@) { - # not installed - my $file = __FILE__; - my $dir = Dir->new(dirname($file)); - my $share_base; - while ($dir->parent) { - if (-d $dir->subdir('share') && -d $dir->subdir('share')->subdir('root')) { - $share_base = $dir->subdir('share')->subdir('root'); - last; - } - $dir = $dir->parent; - } - confess "could not find sharebase by recursion. ended up at $dir, from $file" - unless $share_base; - $args->{share_base_dir} = $share_base; - } - } - my $base = $args->{share_base_dir}->subdir($share_name); - confess "No such share base directory ${base}" - unless -d $base; - $self->share_dir($base); -}; - - - =head1 DESCRIPTION This module is used by B to create a set of scripts for a @@ -692,6 +655,31 @@ Writes content to a file. Called by L. Calculates the name of the next numbered test file and returns it. Don't give the number or the .t suffix for the test name. +=head2 Dir + +Alias for L + +=cut + +=head2 get_sharedir_file + +Method for getting a file out of share/ + +=cut + +=head2 render_file_contents + +Process a L template. + +=cut + +=head2 render_sharedir_file + +Render a template/image file from our share directory + +=cut + + =head1 NOTE The helpers will read author name from /etc/passwd by default.