X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=1fabc37e9df406df992edb6f7801f10fda8685b9;hb=f04816ce0ee1fdd7127d8c9f2aaa78345e0b7169;hp=78ae239b36a4437802dc57bf253695a4d4d01247;hpb=f228c263af3f25974ccc3e07840971f70a28a794;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 78ae239..1fabc37 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -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; }