moved code block from ->components to the container
André Walker [Sat, 23 Jul 2011 14:31:43 +0000 (11:31 -0300)]
lib/Catalyst.pm
lib/Catalyst/IOC/Container.pm

index b7e833e..2e4f337 100644 (file)
@@ -27,7 +27,6 @@ use URI::https;
 use Tree::Simple qw/use_weak_refs/;
 use Tree::Simple::Visitor::FindByUID;
 use Class::C3::Adopt::NEXT;
-use Hash::Util qw/lock_hash/;
 use List::MoreUtils qw/uniq/;
 use attributes;
 use utf8;
@@ -1474,19 +1473,7 @@ sub components {
         }
     }
 
-    my %components;
-    for my $container (keys %$containers) {
-        my @service_list = $containers->{$container}->get_service_list;
-        for my $component (@service_list) {
-            my $comp = $containers->{$container}->resolve(
-                service => $component
-            );
-            my $comp_name = ref $comp || $comp;
-            $components{$comp_name} = $comp;
-        }
-    }
-
-    return lock_hash %components;
+    return $class->container->get_all_components();
 }
 
 =head2 $c->context_class
index 953de4a..9b8243c 100644 (file)
@@ -4,6 +4,7 @@ use Moose;
 use Config::Any;
 use Data::Visitor::Callback;
 use Catalyst::Utils ();
+use Hash::Util qw/lock_hash/;
 use MooseX::Types::LoadableClass qw/ LoadableClass /;
 use Catalyst::IOC::BlockInjection;
 use namespace::autoclean;
@@ -489,6 +490,27 @@ sub get_components_types {
     return @comps_types;
 }
 
+sub get_all_components {
+    my $self = shift;
+    my %components;
+
+    my $containers = {
+        map { $_ => $self->get_sub_container($_) } qw(model view controller)
+    };
+
+    for my $container (keys %$containers) {
+        for my $component ($containers->{$container}->get_service_list) {
+            my $comp = $containers->{$container}->resolve(
+                service => $component
+            );
+            my $comp_name = ref $comp || $comp;
+            $components{$comp_name} = $comp;
+        }
+    }
+
+    return lock_hash %components;
+}
+
 1;
 
 __END__
@@ -541,6 +563,8 @@ Catalyst::Container - IOC for Catalyst components
 
 =head2 get_components_types
 
+=head2 get_all_components
+
 =head2 find_component
 
 =head2 find_component_regexp