[Catalyst-commits] r11189 - in Catalyst-Runtime/5.80/trunk: . lib t

t0m at dev.catalyst.perl.org t0m at dev.catalyst.perl.org
Fri Aug 21 19:54:58 GMT 2009


Author: t0m
Date: 2009-08-21 19:54:58 +0000 (Fri, 21 Aug 2009)
New Revision: 11189

Modified:
   Catalyst-Runtime/5.80/trunk/Changes
   Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm
   Catalyst-Runtime/5.80/trunk/t/unit_core_component_loading.t
Log:
Fix and tests for big issue in 5.80008

Modified: Catalyst-Runtime/5.80/trunk/Changes
===================================================================
--- Catalyst-Runtime/5.80/trunk/Changes	2009-08-21 16:19:53 UTC (rev 11188)
+++ Catalyst-Runtime/5.80/trunk/Changes	2009-08-21 19:54:58 UTC (rev 11189)
@@ -1,5 +1,10 @@
 # This file documents the revision history for Perl extension Catalyst.
 
+  Bug fixes:
+      - Fix and add tests for generating inner packages inside the COMPONENT
+        method, and those packages being correctly registered as components.
+        This fixes Catalyst::Model::DBIC among others.
+
 5.80008 2009-08-21 17:47:30
 
   Bug fixes:

Modified: Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm
===================================================================
--- Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm	2009-08-21 16:19:53 UTC (rev 11188)
+++ Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm	2009-08-21 19:54:58 UTC (rev 11189)
@@ -1175,7 +1175,7 @@
 
 If the first argument is a string, it is taken as a public URI path relative
 to C<< $c->namespace >> (if it doesn't begin with a forward slash) or
-relative to the application root (if it does). It is then merged with 
+relative to the application root (if it does). It is then merged with
 C<< $c->request->base >>; any C<@args> are appended as additional path
 components; and any C<%query_values> are appended as C<?foo=bar> parameters.
 
@@ -1187,13 +1187,13 @@
 provided, appending any arguments or parameters and creating an absolute
 URI.
 
-The captures for the current request can be found in 
+The captures for the current request can be found in
 C<< $c->request->captures >>, and actions can be resolved using
 C<< Catalyst::Controller->action_for($name) >>. If you have a private action
 path, use C<< $c->uri_for_action >> instead.
 
   # Equivalent to $c->req->uri
-  $c->uri_for($c->action, $c->req->captures, 
+  $c->uri_for($c->action, $c->req->captures,
       @{ $c->req->args }, $c->req->params);
 
   # For the Foo action in the Bar controller
@@ -2172,9 +2172,12 @@
         $class->_controller_init_base_classes($component);
     }
 
-    for my $component (uniq map { $class->expand_component_module( $_, $config ) } @comps ) {
-        $class->_controller_init_base_classes($component); # Also cover inner packages
+    for my $component (@comps) {
         $class->components->{ $component } = $class->setup_component($component);
+        for my $component ($class->expand_component_module( $component, $config )) {
+            $class->_controller_init_base_classes($component); # Also cover inner packages
+            $class->components->{ $component } = $class->setup_component($component);
+        }
     }
 }
 
@@ -2214,15 +2217,11 @@
 Components found by C<locate_components> will be passed to this method, which
 is expected to return a list of component (package) names to be set up.
 
-By default, this method will return the component itself as well as any inner
-packages found by L<Devel::InnerPackage>.
-
 =cut
 
 sub expand_component_module {
     my ($class, $module) = @_;
-    my @inner = Devel::InnerPackage::list_packages( $module );
-    return ($module, @inner);
+    Devel::InnerPackage::list_packages( $module );
 }
 
 =head2 $c->setup_component

Modified: Catalyst-Runtime/5.80/trunk/t/unit_core_component_loading.t
===================================================================
--- Catalyst-Runtime/5.80/trunk/t/unit_core_component_loading.t	2009-08-21 16:19:53 UTC (rev 11188)
+++ Catalyst-Runtime/5.80/trunk/t/unit_core_component_loading.t	2009-08-21 19:54:58 UTC (rev 11189)
@@ -2,7 +2,7 @@
 # (do not forget to update the number of components in test 3 as well)
 # 5 extra tests for the loading options
 # One test for components in inner packages
-use Test::More tests => 2 + 6 * 24 + 5 + 1;
+use Test::More tests => 2 + 6 * 24 + 7 + 1;
 
 use strict;
 use warnings;
@@ -175,6 +175,9 @@
     my \$self = shift->next::method(\@_);
     no strict 'refs';
     *{\__PACKAGE__ . "::whoami"} = sub { return \__PACKAGE__; };
+    *${appclass}::Model::TopLevel::GENERATED::ACCEPT_CONTEXT = sub {
+        return bless {}, 'FooBarBazQuux';
+    };
     \$self;
 }
 
@@ -200,6 +203,10 @@
 
 is($@, '', "Didn't load component twice");
 
+ok($appclass->model('TopLevel::Generated'), 'Have generated model');
+is(ref($appclass->model('TopLevel::Generated')), 'FooBarBazQuux',
+    'ACCEPT_CONTEXT in generated inner package fired as expected');
+
 $appclass = "InnerComponent";
 
 {




More information about the Catalyst-commits mailing list