X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FUtils.pm;h=f3d8c12c4babf134f7981fecee4d9d7f4d210fe2;hb=e73e3bad5248d5d16e6b32024ca341d1208e7bcb;hp=fd23d9504e0aea2de046aca14e1c1307986f33ed;hpb=59ede84ed03cb297507bbb89058479040969c6f8;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Utils.pm b/lib/Catalyst/Utils.pm index fd23d95..f3d8c12 100644 --- a/lib/Catalyst/Utils.pm +++ b/lib/Catalyst/Utils.pm @@ -8,6 +8,7 @@ use Path::Class; use URI; use Class::Inspector; use Carp qw/croak/; +use Cwd; =head1 NAME @@ -19,6 +20,8 @@ See L. =head1 DESCRIPTION +Catalyst Utilities. + =head1 METHODS =head2 appprefix($class) @@ -160,6 +163,7 @@ sub home { # find the @INC entry in which $file was found (my $path = $inc_entry) =~ s/$file$//; + $path ||= cwd() if !defined $path || !length $path; my $home = dir($path)->absolute->cleanup; # pop off /lib and /blib if they're there @@ -171,8 +175,9 @@ sub home { # clean up relative path: # MyApp/script/.. -> MyApp - my ($lastdir) = $home->dir_list( -1, 1 ); - if ( $lastdir eq '..' ) { + my $dir; + my @dir_list = $home->dir_list(); + while (($dir = pop(@dir_list)) && $dir eq '..') { $home = dir($home)->parent->parent; } @@ -264,7 +269,9 @@ sub ensure_class_loaded { my $error; { local $@; - eval "require $class;"; + my $file = $class . '.pm'; + $file =~ s{::}{/}g; + eval { CORE::require($file) }; $error = $@; } @@ -326,10 +333,48 @@ sub env_value { return; } -=head1 AUTHOR +=head2 term_width + +Try to guess terminal width to use with formatting of debug output + +All you need to get this work, is: + +1) Install Term::Size::Any, or + +2) Export $COLUMNS from your shell. + +(Warning to bash users: 'echo $COLUMNS' may be showing you the bash +variable, not $ENV{COLUMNS}. 'export COLUMNS=$COLUMNS' and you should see +that 'env' now lists COLUMNS.) + +As last resort, default value of 80 chars will be used. + +=cut + +my $_term_width; + +sub term_width { + return $_term_width if $_term_width; + + my $width = eval ' + use Term::Size::Any; + my ($columns, $rows) = Term::Size::Any::chars; + return $columns; + '; + + if ($@) { + $width = $ENV{COLUMNS} + if exists($ENV{COLUMNS}) + && $ENV{COLUMNS} =~ m/^\d+$/; + } + + $width = 80 unless ($width && $width >= 80); + return $_term_width = $width; +} + +=head1 AUTHORS -Sebastian Riedel, C -Yuval Kogman, C +Catalyst Contributors, see Catalyst.pm =head1 COPYRIGHT