update distar url
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Utils.pm
index db89063..fabbb81 100644 (file)
@@ -394,6 +394,7 @@ this
 =cut
 
 my $_term_width;
+my $_use_term_size_any;
 
 sub term_width {
     my $force_reset = shift;
@@ -402,26 +403,41 @@ sub term_width {
 
     return $_term_width if $_term_width;
 
+    if ($ENV{COLUMNS} && $ENV{COLUMNS} =~ /\A\d+\z/) {
+        return $_term_width = $ENV{COLUMNS};
+    }
+
+    if (!-t STDOUT && !-t STDERR) {
+        return $_term_width = 80;
+    }
+
+    if (!defined $_use_term_size_any) {
+        eval {
+            require Term::Size::Any;
+            Term::Size::Any->import();
+            $_use_term_size_any = 1;
+            1;
+        } or do {
+            if ( $@ =~ m[Can't locate Term/Size/Any\.pm] ) {
+                warn "Term::Size::Any is not installed, can't autodetect terminal column width\n";
+            }
+            else {
+                warn "There was an error trying to detect your terminal size: $@\n";
+            }
+            $_use_term_size_any = 0;
+        };
+    }
+
     my $width;
-    eval '
-      use Term::Size::Any;
-      ($width) = Term::Size::Any::chars;
-      1;
-    ' or do {
-          if($@ =~m[Can't locate Term/Size/Any.pm]) {
-            warn "Term::Size::Any is not installed, can't autodetect terminal column width\n";
-          } else {
-            warn "There was an error trying to detect your terminal size: $@\n";
-          }
-        warn 'Trouble trying to detect your terminal size, looking at $ENV{COLUMNS}'."\n";
-        $width = $ENV{COLUMNS}
-            if exists($ENV{COLUMNS})
-            && $ENV{COLUMNS} =~ m/^\d+$/;
-    };
 
-    do {
-      warn "Cannot determine desired terminal width, using default of 80 columns\n";
-      $width = 80 } unless ($width && $width >= 80);
+    if ($_use_term_size_any) {
+        $width = Term::Size::Any::chars(*STDERR) || Term::Size::Any::chars(*STDOUT);
+    }
+
+    if (!$width || $width < 80) {
+        $width = 80;
+    }
+
     return $_term_width = $width;
 }
 
@@ -510,7 +526,7 @@ Used to add components at runtime:
 
     into        The Catalyst package to inject into (e.g. My::App)
     component   The component package to inject
-    traits      (Optional) ArrayRef of L<Moose::Role>s that the componet should consume.
+    traits      (Optional) ArrayRef of L<Moose::Role>s that the component should consume.
     as          An optional moniker to use as the package name for the derived component
 
 For example:
@@ -569,19 +585,16 @@ sub inject_component {
             croak "Unable to build component package for \"$component_package\": $@";
         Moose::Util::apply_all_roles($component_package, @{$given{traits}}) if $given{traits};
         (my $file = "$component_package.pm") =~ s{::}{/}g;
-        $INC{$file} ||= 1;    
+        $INC{$file} ||= 1;
     }
 
     my $_setup_component = sub {
       my $into = shift;
       my $component_package = shift;
-      $into->components->{$component_package} = $into->setup_component( $component_package );
+      $into->components->{$component_package} = $into->delayed_setup_component( $component_package );
     };
 
     $_setup_component->( $into, $component_package );
-    for my $inner_component_package ( Devel::InnerPackage::list_packages( $component_package ) ) {
-        $_setup_component->( $into, $inner_component_package );
-    }
 }
 
 =head1 PSGI Helpers