allow uri_for_action to be called with captures and args in a single arrayref
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index 6e9d63c..615472a 100644 (file)
@@ -84,7 +84,7 @@ __PACKAGE__->stats_class('Catalyst::Stats');
 
 # Remember to update this in Catalyst::Runtime as well!
 
-our $VERSION = '5.90002';
+our $VERSION = '5.90004';
 
 sub import {
     my ( $class, @arguments ) = @_;
@@ -1347,7 +1347,15 @@ sub uri_for {
         }
 
         my $action = $path;
-        $path = $c->dispatcher->uri_for_action($action, $captures);
+        # ->uri_for( $action, \@captures_and_args, \%query_values? )
+        if( !@args && $action->number_of_args ) {
+            my $expanded_action = $c->dispatcher->expand_action( $action );
+
+            my $num_captures = $expanded_action->number_of_captures;
+            unshift @args, splice @$captures, $num_captures;
+        }
+
+       $path = $c->dispatcher->uri_for_action($action, $captures);
         if (not defined $path) {
             $c->log->debug(qq/Can't find uri_for action '$action' @$captures/)
                 if $c->debug;
@@ -2619,17 +2627,32 @@ sub engine_class {
             Catalyst::EngineLoader->new({
                 application_name => $class,
                 (defined $requested_engine
-                     ? (requested_engine => $requested_engine) : ()),
+                     ? (catalyst_engine_class => $requested_engine) : ()),
             }),
         );
     }
+
     $class->engine_loader->catalyst_engine_class;
 }
 
 sub setup_engine {
     my ($class, $requested_engine) = @_;
 
-    my $engine = $class->engine_class($requested_engine);
+    my $engine = do {
+        my $loader = $class->engine_loader;
+
+        if (!$loader || $requested_engine) {
+            $loader = Catalyst::EngineLoader->new({
+                application_name => $class,
+                (defined $requested_engine
+                     ? (requested_engine => $requested_engine) : ()),
+            }),
+
+            $class->engine_loader($loader);
+        }
+
+        $loader->catalyst_engine_class;
+    };
 
     # Don't really setup_engine -- see _setup_psgi_app for explanation.
     return if $class->loading_psgi_file;