X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine.pm;h=f74fa734ccb5fb8d95787a50394ad09f5db4e2a7;hb=3e93ee3b67452c2c7f1af70be3a91e2784320576;hp=4141198f6b9244f93e863998dd66849d2e853323;hpb=89acad38288ee023e8f6398bbee9c1d2fd6fdbfe;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm index 4141198..f74fa73 100644 --- a/lib/Catalyst/Engine.pm +++ b/lib/Catalyst/Engine.pm @@ -679,30 +679,31 @@ Setup components. sub setup_components { my $self = shift; - - $self->components( {} ); - - my @components; - for my $component ( $self->retrieve_components ) { - - unless ( UNIVERSAL::isa( $component, 'Catalyst::Base' ) ) { - $self->components->{$component} = $component; - next; - } - - my $instance; - eval { $instance = $component->new($self) }; - - if ( $@ ) { - die( qq/Couldn't instantiate "$component", "$@"/ ); - } + # Components + my $class = ref $self || $self; + eval <<""; + package $class; + import Module::Pluggable::Fast + name => '_components', + search => [ + '$class\::Controller', '$class\::C', + '$class\::Model', '$class\::M', + '$class\::View', '$class\::V' + ]; - $self->components->{$component} = $instance; + if ( my $error = $@ ) { + chomp $error; + die qq/Couldn't load components "$error"/; + } - push @components, $component; + $self->components( {} ); + my @comps; + for my $comp ( $self->_components($self) ) { + $self->components->{ ref $comp } = $comp; + push @comps, $comp; } - + my $t = Text::ASCIITable->new( { hide_HeadRow => 1, hide_HeadLine => 1 } ); $t->setCols('Class'); $t->setColWidth( 'Class', 75, 1 ); @@ -710,7 +711,7 @@ sub setup_components { $self->log->debug( 'Loaded components', $t->draw ) if ( @{ $t->{tbl_rows} } && $self->debug ); - $self->setup_actions( [ $self, @components ] ); + $self->setup_actions( [ $self, @comps ] ); } =item $c->state