X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=f1263a89baba31e276dc5e7c86f24a4bfa8c6b95;hb=77e27f6ec357bc9b622587b49ca10bca9dd89117;hp=c66345c15cf3853549b604c2794d20210cc48b53;hpb=2832ecea1f0b0fdfa6873ec9896523b72af01b77;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index c66345c..f1263a8 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -559,37 +559,12 @@ sub controller { my ( $c, $name, @args ) = @_; my $container = $c->container->get_sub_container('controller'); - my $appclass = ref $c || $c; if( $name ) { - if ( !ref $name ) { # Direct component hash lookup to avoid costly regexps - return $container->resolve(service => $name, parameters => { context => [ $c, @args ] } ) - if $container->has_service($name); - } - - return - if $c->config->{disable_component_resolution_regex_fallback} && !ref $name; - - my $query = ref $name ? $name : qr{$name}i; - $query =~ s/^${appclass}::(C|Controller):://; - my @comps = $container->get_service_list; - my @result; - for (@comps) { - push @result, $container->resolve( service => $_, parameters => { context => [ $c, @args ] } ) - if m/$query/; - } + # Direct component hash lookup to avoid costly regexps + return $container->get_component( $name, $c, @args ) + if $container->has_service($name) && !ref $name; - if (@result) { - if (!ref $name) { - $c->log->warn( Carp::shortmess(qq(Found results for "${name}" using regexp fallback)) ); - $c->log->warn( 'Relying on the regexp fallback behavior for component resolution' ); - $c->log->warn( 'is unreliable and unsafe. You have been warned' ); - return shift @result; - } - - return @result; - } - - return; + return $container->get_component_regexp( $name, $c, @args ); } return $c->component( $c->action->class ); @@ -622,34 +597,11 @@ sub model { my $container = $c->container->get_sub_container('model'); if( $name ) { - if ( !ref $name && $container->has_service($name)) { # Direct component hash lookup to avoid costly regexps - return $container->resolve( service => $name, parameters => { context => [ $c, @args ] } ); - } + # Direct component hash lookup to avoid costly regexps + return $container->get_component( $name, $c, @args ) + if $container->has_service($name) && !ref $name; - return - if $c->config->{disable_component_resolution_regex_fallback} && !ref $name; - - my $query = ref $name ? $name : qr{$name}i; - $query =~ s/^${appclass}::(M|Model):://; - my @comps = $container->get_service_list; - my @result; - for (@comps) { - push @result, $container->resolve( service => $_, parameters => { context => [ $c, @args ] } ) - if m/$query/; - } - - if (@result) { - if (!ref $name) { - $c->log->warn( Carp::shortmess(qq(Found results for "${name}" using regexp fallback)) ); - $c->log->warn( 'Relying on the regexp fallback behavior for component resolution' ); - $c->log->warn( 'is unreliable and unsafe. You have been warned' ); - return shift @result; - } - - return @result; - } - - return; + return $container->get_component_regexp( $name, $c, @args ); } if (ref $c) { @@ -672,7 +624,7 @@ sub model { $c->log->warn( 'NB: in version 5.81, the "random" behavior will not work at all.' ); } - return $container->resolve( service => $comp, parameters => { context => [ $c, @args ] } ); + return $container->get_component( $comp, $c, @args ); } @@ -703,39 +655,13 @@ sub view { my $container = $c->container->get_sub_container('view'); if( $name ) { - if ( !ref $name ) { # Direct component hash lookup to avoid costly regexps - if ( $container->has_service($name) ) { - return $container->resolve( service => $name, parameters => { context => [ $c, @args ] } ); - } - else { - $c->log->warn( "Attempted to use view '$name', but does not exist" ); - } - } - - return - if $c->config->{disable_component_resolution_regex_fallback} && !ref $name; - - my $query = ref $name ? $name : qr{$name}i; - $query =~ s/^${appclass}::(V|View):://; - my @comps = $container->get_service_list; - my @result; - for (@comps) { - push @result, $container->resolve( service => $_, parameters => { context => [ $c, @args ] } ) - if m/$query/; - } + # Direct component hash lookup to avoid costly regexps + return $container->get_component( $name, $c, @args ) + if !ref $name && $container->has_service($name); - if (@result) { - if (!ref $name) { - $c->log->warn( Carp::shortmess(qq(Found results for "${name}" using regexp fallback)) ); - $c->log->warn( 'Relying on the regexp fallback behavior for component resolution' ); - $c->log->warn( 'is unreliable and unsafe. You have been warned' ); - return shift @result; - } - - return @result; - } + $c->log->warn( "Attempted to use view '$name', but does not exist" ); - return; + return $container->get_component_regexp( $name, $c, @args ); } if (ref $c) { @@ -757,7 +683,7 @@ sub view { $c->log->warn( 'NB: in version 5.81, the "random" behavior will not work at all.' ); } - return $container->resolve( service => $comp, parameters => { context => [ $c, @args ] } ); + return $container->get_component( $comp, $c, @args ); } =head2 $c->controllers @@ -816,6 +742,7 @@ disable_component_resolution_regex_fallback to a true value. sub component { my ( $c, $component, @args ) = @_; + unshift @args, $c; if ( $component ) { my ($type, $name) = _get_component_type_name($component); @@ -824,23 +751,10 @@ sub component { my $container = $c->container->get_sub_container($type); if( !ref $component && $container->has_service($name) ) { - return $container->resolve( service => $name, parameters => { context => [ $c, @args ] } ); + return $container->get_component( $name, \@args ); } - return - if $c->config->{disable_component_resolution_regex_fallback}; - - my $query = qr{$name}i; - my @components = $container->get_service_list; - my @result = grep { m{$query} } @components; - - if (@result) { - $c->log->warn( Carp::shortmess(qq(Found results for "${component}" using regexp fallback)) ); - $c->log->warn( 'Relying on the regexp fallback behavior for component resolution' ); - $c->log->warn( 'is unreliable and unsafe. You have been warned' ); - - return $container->resolve( service => $result[0], parameters => { context => [$c, @args] } ); - } + return $container->get_component_regexp( $c, $name, \@args ); } return @@ -855,14 +769,14 @@ sub component { my @result = grep { m{$query} } @components; if (@result) { - return map { $subcontainer->resolve( service => $_, parameters => { context => [$c, @args] } ) } @result + return map { $subcontainer->get_component( $_, \@args ) } @result if ref $component; $c->log->warn( Carp::shortmess(qq(Found results for "${component}" using regexp fallback)) ); $c->log->warn( 'Relying on the regexp fallback behavior for component resolution' ); $c->log->warn( 'is unreliable and unsafe. You have been warned' ); - return $subcontainer->resolve( service => $result[0], parameters => { context => [$c, @args] } ); + return $subcontainer->get_component( $result[0], \@args ); } } @@ -1606,7 +1520,7 @@ around components => sub { my ($type, $name) = _get_component_type_name($component); # FIXME: shouldn't the service name be $name? - $containers->{$type}->add_service(Catalyst::BlockInjection->new( name => $name, block => sub { return $class->setup_component($component) } )); + $containers->{$type}->add_service(Catalyst::IOC::BlockInjection->new( name => $name, block => sub { return $class->setup_component($component) } )); } return $class->$orig($components); @@ -2443,12 +2357,16 @@ sub setup_config { my %args = %{ $class->config || {} }; - my @container_classes = ( "${class}::Container", 'Catalyst::Container'); + my @container_classes = ( "${class}::Container", 'Catalyst::IOC::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" ); + my $container = $container_class->new( %args, + name => "$class", + disable_regex_fallback => + $class->config->{disable_component_resolution_regex_fallback}, + ); $class->container($container); my $config = $container->resolve(service => 'config'); @@ -2456,7 +2374,7 @@ sub setup_config { $class->finalize_config; # back-compat } -=head $c->finalize_config +=head2 $c->finalize_config =cut @@ -2505,7 +2423,7 @@ sub setup_components { for my $component (@comps) { my $instance = $class->components->{ $component } = $class->setup_component($component); if ( my ($type, $name) = _get_component_type_name($component) ) { - $containers->{$type}->add_service(Catalyst::BlockInjection->new( name => $name, block => sub { return $instance } )); + $containers->{$type}->add_service(Catalyst::IOC::BlockInjection->new( name => $name, block => sub { return $instance } )); } my @expanded_components = $instance->can('expand_modules') ? $instance->expand_modules( $component, $config ) @@ -2519,7 +2437,7 @@ sub setup_components { ) if $deprecatedcatalyst_component_names; if (my ($type, $name) = _get_component_type_name($component)) { - $containers->{$type}->add_service(Catalyst::BlockInjection->new( name => $name, block => sub { return $class->setup_component($component) } )); + $containers->{$type}->add_service(Catalyst::IOC::BlockInjection->new( name => $name, block => sub { return $class->setup_component($component) } )); } $class->components->{ $component } = $class->setup_component($component); @@ -3187,6 +3105,8 @@ Andrew Ford EA.Ford@ford-mason.co.ukE Andrew Ruthven +André Walker + andyg: Andy Grundman audreyt: Audrey Tang