X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FHelper.pm;h=690aad15c51a1baf978aa999be668be188a064f0;hb=4c709311f8cac434180c9be738558488da23d5e7;hp=6a6e09b6f7385044bf30ee5d92952416c26fe1bd;hpb=b4b7c20623c95fbd6bc61219e2056db171c30e8c;p=catagits%2FCatalyst-Devel.git diff --git a/lib/Catalyst/Helper.pm b/lib/Catalyst/Helper.pm index 6a6e09b..690aad1 100644 --- a/lib/Catalyst/Helper.pm +++ b/lib/Catalyst/Helper.pm @@ -1,6 +1,5 @@ package Catalyst::Helper; use Moose; -use Moose::Util::TypeConstraints; use Config; use File::Spec; use File::Spec::Unix; @@ -16,6 +15,8 @@ use Path::Class qw/dir file/; use File::ShareDir qw/dist_dir/; use namespace::autoclean; +with 'MooseX::Emulate::Class::Accessor::Fast'; + my %cache; =head1 NAME @@ -31,7 +32,10 @@ Catalyst::Helper - Bootstrap a Catalyst application sub get_sharedir_file { my ($self, @filename) = @_; my $dist_dir; - if (-d "inc/.author" && -f "lib/Catalyst/Helper.pm" + if (exists $ENV{CATALYST_DEVEL_SHAREDIR}) { + $dist_dir = $ENV{CATALYST_DEVEL_SHAREDIR}; + } + elsif (-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'; @@ -64,27 +68,23 @@ sub get_file { return 0; } -my $appname = subtype 'Str', - where { /[^\w:]/ or /^\d/ or /\b:\b|:{3,}/ }, - message { "Error: Invalid application name." }; - -has name => ( is => 'ro', isa => $appname, required => 1 ); - -foreach my $name (qw/ dir script appprefix appenv author /) { - has $name => ( is => 'ro', isa => 'Str', init_arg => undef, lazy => 1, builder => "_build_$name" ); -} - -sub _build_dir { my $dir = shift->name; $dir =~ s/\:\:/-/g; return $dir; } -sub _build_script { dir( shift->dir, 'script' ) } -sub _build_appprefix { Catalyst::Utils::appprefix(shift->name) } -sub _build_appenv { Catalyst::Utils::appenv(shift->name) } sub mk_app { - my ( $self ) = @_; + my ( $self, $name ) = @_; # Needs to be here for PAR require Catalyst; + if ( $name =~ /[^\w:]/ || $name =~ /^\d/ || $name =~ /\b:\b|:{3,}/) { + warn "Error: Invalid application name.\n"; + return 0; + } + $self->{name } = $name; + $self->{dir } = $name; + $self->{dir } =~ s/\:\:/-/g; + $self->{script } = dir( $self->{dir}, 'script' ); + $self->{appprefix } = Catalyst::Utils::appprefix($name); + $self->{appenv } = Catalyst::Utils::class2env($name); $self->{startperl } = -r '/usr/bin/env' ? '#!/usr/bin/env perl' : "#!$Config{perlpath} -w"; @@ -328,15 +328,25 @@ sub _mk_dirs { $self->{mod} = dir( $self->{lib}, $self->{class} ); $self->mk_dir( $self->{mod} ); - $self->{m} = dir( $self->{mod}, 'Model' ); - $self->mk_dir( $self->{m} ); - $self->{v} = dir( $self->{mod}, 'View' ); - $self->mk_dir( $self->{v} ); - $self->{c} = dir( $self->{mod}, 'Controller' ); - $self->mk_dir( $self->{c} ); - + if ( $self->{short} ) { + $self->{m} = dir( $self->{mod}, 'M' ); + $self->mk_dir( $self->{m} ); + $self->{v} = dir( $self->{mod}, 'V' ); + $self->mk_dir( $self->{v} ); + $self->{c} = dir( $self->{mod}, 'C' ); + $self->mk_dir( $self->{c} ); + } + else { + $self->{m} = dir( $self->{mod}, 'Model' ); + $self->mk_dir( $self->{m} ); + $self->{v} = dir( $self->{mod}, 'View' ); + $self->mk_dir( $self->{v} ); + $self->{c} = dir( $self->{mod}, 'Controller' ); + $self->mk_dir( $self->{c} ); + } my $name = $self->{name}; - $self->{rootname} = "$name\::Controller::Root"; + $self->{rootname} = + $self->{short} ? "$name\::C::Root" : "$name\::Controller::Root"; $self->{base} = dir( $self->{dir} )->absolute; }