split Container's BUILD, moved BB logic from Catalyst.pm to the Container
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index 78ae239..1fabc37 100644 (file)
@@ -548,11 +548,11 @@ sub _comp_names_search_prefixes {
     my $filter   = "^${appclass}::(" . join( '|', @prefixes ) . ')::';
     $filter = qr/$filter/; # Compile regex now rather than once per loop
 
-    my @components = map { $c->container->get_sub_container($_)->get_service_list } qw(controller view model); 
+    my @components = map { $c->container->get_sub_container($_)->get_service_list } qw(controller view model);
 
     # map the original component name to the sub part that we will search against
     my %eligible = map { my $n = $_; $n =~ s{^$appclass\::[^:]+::}{}; $_ => $n; }
-        grep { /$filter/ } @components; 
+        grep { /$filter/ } @components;
 
     # undef for a name will return all
     return keys %eligible if !defined $name;
@@ -657,7 +657,7 @@ sub controller {
         unless ( ref($name) ) { # Direct component hash lookup to avoid costly regexps
             my $check = $appclass."::Controller::".$name;
             my $container = $c->container->get_sub_container('controller');
-            return $c->_filter_component( $container->resolve(service => "$check"), @args ) 
+            return $c->_filter_component( $container->resolve(service => "$check"), @args )
                 if $container->has_service($check);
         }
         my @result = $c->_comp_search_prefixes( $name, qw/Controller C/ );
@@ -696,7 +696,7 @@ sub model {
         unless ( ref($name) ) { # Direct component hash lookup to avoid costly regexps
             my $check = $appclass."::Model::".$name;
             my $container = $c->container->get_sub_container('model');
-            return $c->_filter_component( $container->resolve(service => "$check"), @args ) 
+            return $c->_filter_component( $container->resolve(service => "$check"), @args )
                 if $container->has_service($check);
         }
         my @result = $c->_comp_search_prefixes( $name, qw/Model M/ );
@@ -758,7 +758,7 @@ sub view {
             my $container = $c->container->get_sub_container('view');
             if ($container->has_service($check)) {
 
-                return $c->_filter_component( $container->get_service($check)->get, @args );
+                return $c->_filter_component( $container->resolve(service => $check), @args );
             }
             else {
                 $c->log->warn( "Attempted to use view '$check', but does not exist" );
@@ -1599,14 +1599,15 @@ Returns a hash of components.
 
 around components => sub {
     my $orig  = shift;
-    my $class = shift; 
+    my $class = shift;
     my $comps = shift;
 
     return $class->$orig if ( !$comps );
 
+# FIXME: should this ugly kludge exist?
     $class->setup_config unless defined $class->container;
 
-# should there be a warning here, not to use this accessor to create the components?
+# FIXME: should there be a warning here, not to use this accessor to create the components?
     my $components = {};
 
     my $containers;
@@ -2452,18 +2453,17 @@ sub setup_actions { my $c = shift; $c->dispatcher->setup_actions( $c, @_ ) }
 sub setup_config {
     my $class = shift;
 
-    my %args = %{$class->config || {} };
-    my @container_classes = qw/MyApp::Container Catalyst::Container/;
+    my %args = %{ $class->config || {} };
+
+    my @container_classes = ( "${class}::Container", 'Catalyst::Container');
     unshift @container_classes, delete $args{container_class} if exists $args{container_class};
 
     my $container_class = Class::MOP::load_first_existing_class(@container_classes);
 
     my $container = $container_class->new( %args, name => "$class" );
-
-    $container->add_sub_container(Bread::Board::Container->new( name => $_ )) for qw(model controller view);
     $class->container($container);
 
-    my $config = $container->fetch('config')->get;
+    my $config = $container->resolve(service => 'config');
     $class->config($config);
     $class->finalize_config; # back-compat
 }
@@ -2544,9 +2544,9 @@ sub _get_component_type {
     my @parts     = split /::/, $component;
 
     for (@parts) {
-        return 'controller' if /c|controller/i;
-        return 'model'      if /m|model/i;
-        return 'view'       if /v|view/i;
+        return 'controller' if /^c|controller$/i;
+        return 'model'      if /^m|model$/i;
+        return 'view'       if /^v|view$/i;
     }
 }
 
@@ -2620,8 +2620,7 @@ sub setup_component {
             message => qq/Couldn't instantiate component "$component", "$error"/
         );
     }
-
-    unless (blessed $instance) {
+    elsif (!blessed $instance) {
         my $metaclass = Moose::Util::find_meta($component);
         my $method_meta = $metaclass->find_method_by_name('COMPONENT');
         my $component_method_from = $method_meta->associated_metaclass->name;
@@ -2631,6 +2630,7 @@ sub setup_component {
             qq/Couldn't instantiate component "$component", COMPONENT() method (from $component_method_from) didn't return an object-like value (value was $value)./
         );
     }
+
     return $instance;
 }