fixing components to work the way it did
André Walker [Thu, 21 Jul 2011 13:50:46 +0000 (10:50 -0300)]
lib/Catalyst.pm
lib/Catalyst/IOC/Service/WithAcceptContext.pm

index cf0bb95..92a888b 100644 (file)
@@ -1453,13 +1453,19 @@ sub components {
     $class->setup_config unless defined $class->container;
 
     my $containers;
-    $containers->{$_} = $class->container->get_sub_container($_) for qw(model view controller);
+    $containers->{$_} = $class->container->get_sub_container($_)
+        for qw(model view controller);
 
     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 { return $class->setup_component($component) } ));
+            $containers->{$type}->add_service(
+                Catalyst::IOC::BlockInjection->new(
+                    name  => $name,
+                    block => sub { $class->setup_component($component) },
+                )
+            );
         }
     }
 
@@ -1467,13 +1473,16 @@ sub components {
     for my $container (keys %$containers) {
         my @service_list = $containers->{$container}->get_service_list;
         for my $component (@service_list) {
-            $components{$component} =
-                $containers->{$container}->resolve(service => $component);
+            my $comp = $containers->{$container}->resolve(
+                service => $component
+            );
+            my $comp_name = ref $comp || $comp;
+            $components{$comp_name} = $comp;
         }
     }
 
     return lock_hash %components;
-};
+}
 
 =head2 $c->context_class
 
index d4e18c1..8f4ebfc 100644 (file)
@@ -17,7 +17,7 @@ around 'get' => sub {
     my $instance = $self->$orig(%params);
     my $ac_sub   = $self->accept_context_sub;
 
-    if ( $instance->can($ac_sub) ) {
+    if ( $accept_context_args && $instance->can($ac_sub) ) {
         return $instance->$ac_sub( @$accept_context_args );
     }