X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=7e4e229564f31cfd0a7fa6656e8afa1e1cd53772;hb=60a41806ed17aff807a68d6f1f1073e4a2e84883;hp=b6d6231dc4d6fe7cf9e9fb375a75482e49ced242;hpb=2f32de9a2845acc9418f4651463bde9bbf9779d6;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index b6d6231..7e4e229 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -564,13 +564,7 @@ If you want to search for controllers, pass in a regexp as the argument. =cut -sub controller { - my ( $c, $name, @args ) = @_; - - $name ||= Catalyst::Utils::class2classshortsuffix( $c->action->class ); - - return $c->container->get_component_from_sub_container( 'controller', $name, $c, @args); -} +sub controller { shift->_lookup_mvc('controller', @_) } =head2 $c->model($name) @@ -593,20 +587,7 @@ If you want to search for models, pass in a regexp as the argument. =cut -sub model { - my ( $c, $name, @args ) = @_; - - if (ref $c && !$name) { - return $c->stash->{current_model_instance} - if $c->stash->{current_model_instance}; - - $name = $c->stash->{current_model} - if $c->stash->{current_model}; - } - - return $c->container->get_component_from_sub_container( 'model', $name, $c, @args); -} - +sub model { shift->_lookup_mvc('model', @_) } =head2 $c->view($name) @@ -629,18 +610,23 @@ If you want to search for views, pass in a regexp as the argument. =cut -sub view { - my ( $c, $name, @args ) = @_; +sub view { shift->_lookup_mvc('view', @_) } + +sub _lookup_mvc { + my ( $c, $type, $name, @args ) = @_; if (ref $c && !$name) { - return $c->stash->{current_view_instance} - if $c->stash->{current_view_instance}; + my $current_instance = $c->stash->{"current_${type}_instance"}; + return $current_instance + if $current_instance && $type ne 'controller'; - $name = $c->stash->{current_view} - if $c->stash->{current_view}; + $name = $type eq 'controller' + ? Catalyst::Utils::class2classshortsuffix($c->action->class) + : $c->stash->{"current_${type}"} + ; } - return $c->container->get_component_from_sub_container( 'view', $name, $c, @args); + return $c->container->get_component_from_sub_container($type, $name, $c, @args); } =head2 $c->controllers @@ -1031,11 +1017,11 @@ EOF if ( $class->debug and - my @comps_types = $class->container->get_components_types + my $comps = $class->container->get_all_components ) { my $column_width = Catalyst::Utils::term_width() - 8 - 9; my $t = Text::SimpleTable->new( [ $column_width, 'Class' ], [ 8, 'Type' ] ); - $t->row( @$_ ) for @comps_types; + $t->row( $_ => ref($comps->{$_}) ? 'instance' : 'class' ) for keys %$comps; $class->log->debug( "Loaded components:\n" . $t->draw . "\n" ); } @@ -1446,9 +1432,7 @@ sub components { my $container = $class->container; if ( $comps ) { - $container->add_component( - $_, $class - ) for keys %$comps; + $container->add_component( $_ ) for keys %$comps; } return $container->get_all_components(); @@ -2285,15 +2269,15 @@ sub setup_config { my %args = %{ $class->config || {} }; - 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_class = exists $args{container_class} + ? Class::MOP::load_class(delete $args{container_class}) + : Class::MOP::load_first_existing_class("${class}::Container", 'Catalyst::IOC::Container') + ; - my $container = $container_class->new( %args, name => "$class" ); + my $container = $container_class->new( %args, application_name => "$class", name => "$class" ); $class->container($container); - my $config = $container->resolve(service => 'config'); + my $config = $container->resolve( service => 'config' ); $class->config($config); $class->finalize_config; # back-compat } @@ -2316,59 +2300,28 @@ The C config option is passed to both of the above methods. =cut -sub setup_components { - my $class = shift; - my $container = $class->container; +sub setup_components { shift->container->setup_components } - my $config = $class->config->{ setup_components }; - - Catalyst::Exception->throw( - qq{You are using search_extra config option. That option is\n} . - qq{deprecated, please refer to the documentation for\n} . - qq{other ways of achieving the same results.\n} - ) if delete $config->{ search_extra }; +=head2 locate_components - my @comps = $container->locate_components($class, $config); - my %comps = map { $_ => 1 } @comps; - - my $deprecatedcatalyst_component_names = grep { /::[CMV]::/ } @comps; - $class->log->warn(qq{Your application is using the deprecated ::[MVC]:: type naming scheme.\n}. - qq{Please switch your class names to ::Model::, ::View:: and ::Controller: as appropriate.\n} - ) if $deprecatedcatalyst_component_names; - - for my $component ( @comps ) { - - # We pass ignore_loaded here so that overlay files for (e.g.) - # Model::DBI::Schema sub-classes are loaded - if it's in @comps - # we know M::P::O found a file on disk so this is safe - - Catalyst::Utils::ensure_class_loaded( $component, { ignore_loaded => 1 } ); - } +=cut - for my $component (@comps) { - $container->add_component( $component, $class ); -# FIXME - $instance->expand_modules() is broken - my @expanded_components = $container->expand_component_module( $component ); - for my $component (@expanded_components) { - next if $comps{$component}; +# FIXME - removed locate_components +# don't people mess with this method directly? +# what to do with that? - # FIXME - Why is it inside the for loop? It makes no sense - $deprecatedcatalyst_component_names = grep { /::[CMV]::/ } @expanded_components; - $class->log->warn(qq{Your application is using the deprecated ::[MVC]:: type naming scheme.\n}. - qq{Please switch your class names to ::Model::, ::View:: and ::Controller: as appropriate.\n} - ) if $deprecatedcatalyst_component_names; +sub locate_components { + my $class = shift; - $container->add_component( $component, $class ); - } - } + $class->log->warn('The locate_components method has been deprecated.'); + $class->log->warn('Please read Catalyst::IOC::Container documentation to'); + $class->log->warn('update your application.'); - $container->get_sub_container('model')->make_single_default; - $container->get_sub_container('view')->make_single_default; + # XXX think about ditching this sort entirely + return sort { length $a <=> length $b } + @{ $class->container->resolve( service => 'locate_components' ) }; } -# FIXME - removed locate_components -# don't people mess with this method directly? -# what to do with that? =head2 $c->setup_dispatcher