package Catalyst::Setup;
use strict;
+use base qw/Class::Data::Inheritable/;
use Catalyst::Exception;
use Catalyst::Log;
use Catalyst::Utils;
use Path::Class;
use Text::ASCIITable;
+__PACKAGE__->mk_classdata($_) for qw/arguments dispatcher engine log/;
+
=head1 NAME
Catalyst::Setup - The Catalyst Setup class
=over 4
+=item $c->setup
+
+Setup.
+
+ $c->setup;
+
+=cut
+
+sub setup {
+ my $class = shift;
+
+ # Call plugins setup
+ $class->NEXT::setup;
+
+ # Initialize our data structure
+ $class->components( {} );
+
+ $class->setup_components;
+
+ if ( $class->debug ) {
+ my $t = Text::ASCIITable->new;
+ $t->setOptions( 'hide_HeadRow', 1 );
+ $t->setOptions( 'hide_HeadLine', 1 );
+ $t->setCols('Class');
+ $t->setColWidth( 'Class', 75, 1 );
+ $t->addRow($_) for sort keys %{ $class->components };
+ $class->log->debug( "Loaded components:\n" . $t->draw )
+ if ( @{ $t->{tbl_rows} } );
+ }
+
+ # Add our self to components, since we are also a component
+ $class->components->{$class} = $class;
+
+ $class->setup_actions;
+
+ if ( $class->debug ) {
+ my $name = $class->config->{name} || 'Application';
+ $class->log->info("$name powered by Catalyst $Catalyst::VERSION");
+ }
+}
+
=item $c->setup_components
Setup components.