From: André Walker Date: Sat, 23 Jul 2011 15:02:38 +0000 (-0300) Subject: moved temporarily _get_component_type_name to Container X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=f147e6c23995d0beac4bd74cc17dbcfd1f710190 moved temporarily _get_component_type_name to Container --- diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 75459eb..3a8b816 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -1451,13 +1451,8 @@ sub components { if ( $comps ) { for my $component ( keys %$comps ) { - my ($type, $name) = _get_component_type_name($component); - - $containers->{$type}->add_service( - Catalyst::IOC::BlockInjection->new( - name => $name, - block => sub { $class->setup_component($component) }, - ) + $class->container->add_component( + $component, $class->setup_component($component) ); } } @@ -2358,14 +2353,9 @@ sub setup_components { Catalyst::Utils::ensure_class_loaded( $component, { ignore_loaded => 1 } ); } - my $containers; - $containers->{$_} = $class->container->get_sub_container($_) for qw(model view controller); - for my $component (@comps) { my $instance = $class->setup_component($component); - if ( my ($type, $name) = _get_component_type_name($component) ) { - $containers->{$type}->add_service(Catalyst::IOC::BlockInjection->new( name => $name, block => sub { return $instance } )); - } + $class->container->add_component( $component, $instance ); my @expanded_components = $instance->can('expand_modules') ? $instance->expand_modules( $component, $config ) : $class->expand_component_module( $component, $config ); @@ -2377,37 +2367,14 @@ sub setup_components { qq{Please switch your class names to ::Model::, ::View:: and ::Controller: as appropriate.\n} ) if $deprecatedcatalyst_component_names; - if (my ($type, $name) = _get_component_type_name($component)) { - $containers->{$type}->add_service(Catalyst::IOC::BlockInjection->new( name => $name, block => sub { return $class->setup_component($component) } )); - } + $class->container->add_component( $component, $class->setup_component($component) ); } } - $containers->{model}->make_single_default; - $containers->{view}->make_single_default; + $class->container->get_sub_container('model')->make_single_default; + $class->container->get_sub_container('view')->make_single_default; } -# FIXME: should this sub exist? -# should it be moved to Catalyst::Utils, -# or replaced by something already existing there? -sub _get_component_type_name { - my ( $component ) = @_; - - my @parts = split /::/, $component; - - while (my $type = shift @parts) { - return ('controller', join '::', @parts) - if $type =~ /^(c|controller)$/i; - - return ('model', join '::', @parts) - if $type =~ /^(m|model)$/i; - - return ('view', join '::', @parts) - if $type =~ /^(v|view)$/i; - } - - return (undef, $component); -} =head2 $c->locate_components( $setup_component_config ) diff --git a/lib/Catalyst/IOC/Container.pm b/lib/Catalyst/IOC/Container.pm index 0672c83..f332cb8 100644 --- a/lib/Catalyst/IOC/Container.pm +++ b/lib/Catalyst/IOC/Container.pm @@ -433,7 +433,7 @@ sub get_component_from_sub_container { sub find_component { my ( $self, $component, $c, @args ) = @_; - my ( $type, $name ) = Catalyst::_get_component_type_name($component); + my ( $type, $name ) = _get_component_type_name($component); my @result; return $self->get_component_from_sub_container( @@ -470,9 +470,7 @@ sub find_component_regexp { my @components = grep { m{$component} } keys %{ $components }; for (@components) { - # FIXME this is naughty enough being called inside Catalyst.pm - # find some alternative for this sub and remember to delete here - my ($type, $name) = Catalyst::_get_component_type_name($_); + my ($type, $name) = _get_component_type_name($_); push @result, $self->get_component_from_sub_container( $type, $name, @args @@ -521,6 +519,44 @@ sub get_all_components { return lock_hash %components; } +sub add_component { +# FIXME I'm aware it shouldn't be getting $instance as an argument +# and that setup_component should be removed. This is temporary + my ( $self, $component, $instance ) = @_; + my ( $type, $name ) = _get_component_type_name($component); + + return unless $type; + + $self->get_sub_container($type)->add_service( + Catalyst::IOC::BlockInjection->new( + name => $name, + block => sub { $instance }, + ) + ); +} + +# FIXME: should this sub exist? +# should it be moved to Catalyst::Utils, +# or replaced by something already existing there? +sub _get_component_type_name { + my ( $component ) = @_; + + my @parts = split /::/, $component; + + while (my $type = shift @parts) { + return ('controller', join '::', @parts) + if $type =~ /^(c|controller)$/i; + + return ('model', join '::', @parts) + if $type =~ /^(m|model)$/i; + + return ('view', join '::', @parts) + if $type =~ /^(v|view)$/i; + } + + return (undef, $component); +} + 1; __END__ @@ -575,6 +611,8 @@ Catalyst::Container - IOC for Catalyst components =head2 get_all_components +=head2 add_component + =head2 find_component =head2 find_component_regexp