moved version to ::Runtime, modified Makefile.PL
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index 0403b00..0d05976 100644 (file)
@@ -10,6 +10,7 @@ use Catalyst::Request::Upload;
 use Catalyst::Response;
 use Catalyst::Utils;
 use Catalyst::Controller;
+use Catalyst::Runtime;
 use Devel::InnerPackage ();
 use File::stat;
 use Module::Pluggable::Object;
@@ -59,7 +60,7 @@ __PACKAGE__->engine_class('Catalyst::Engine::CGI');
 __PACKAGE__->request_class('Catalyst::Request');
 __PACKAGE__->response_class('Catalyst::Response');
 
-our $VERSION = '5.6902';
+our $VERSION = $Catalyst::Runtime::VERSION;
 
 sub import {
     my ( $class, @arguments ) = @_;
@@ -1801,23 +1802,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<setup_components> config option to pass additional options
+directly to L<Module::Pluggable>. To add additional search paths, specify a key named
+C<search_extra> 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 = (