X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=d4a70c3aa0c252019298fb6e32a7340863c7e398;hb=5882c86e1f256e122583dcc311b17bdbf9a4d766;hp=0403b00c1bcc0aa086a87f29e2582c605bf34bb5;hpb=364d7324169f5562a0e1405413005ba2ac656e88;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 0403b00..d4a70c3 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -1801,23 +1801,29 @@ sub setup_actions { my $c = shift; $c->dispatcher->setup_actions( $c, @_ ) } =head2 $c->setup_components -Sets up components. +Sets up components. Specify a C config option to pass additional options +directly to L. To add additional search paths, specify a key named +C as an array reference. Items in the array beginning with C<::> will have the +application class name prepended to them. =cut sub setup_components { my $class = shift; + my @paths = qw( ::Controller ::C ::Model ::M ::View ::V ); + my $config = $class->config->{ setup_components }; + my $extra = delete $config->{ search_extra } || []; + + push @paths, @$extra; + my $locator = Module::Pluggable::Object->new( - search_path => [ - "${class}::Controller", "${class}::C", - "${class}::Model", "${class}::M", - "${class}::View", "${class}::V" - ], + search_path => [ map { s/^(?=::)/$class/; $_; } @paths ], + %$config ); for my $component ( sort { length $a <=> length $b } $locator->plugins ) { - require Class::Inspector->filename($component); + Catalyst::Utils::ensure_class_loaded( $component ); my $module = $class->setup_component( $component ); my %modules = (