Fix to allow uri_for and uri_with to stringify non-array references
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index 15cbac1..c3b59b9 100644 (file)
@@ -61,7 +61,7 @@ __PACKAGE__->response_class('Catalyst::Response');
 
 # Remember to update this in Catalyst::Runtime as well!
 
-our $VERSION = '5.70_03';
+our $VERSION = '5.7000';
 
 sub import {
     my ( $class, @arguments ) = @_;
@@ -869,7 +869,7 @@ in standard fashion.
 
 Instead of C<$path>, you can also optionally pass a C<$action> object
 which will be resolved to a path using
-C<< $c->dispatcher->uri_for_action .>; if the first element of
+C<< $c->dispatcher->uri_for_action >>; if the first element of
 C<@args> is an arrayref it is treated as a list of captures to be passed
 to C<uri_for_action>.
 
@@ -902,11 +902,10 @@ sub uri_for {
       ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} );
 
     for my $value ( values %$params ) {
-        my $isa_ref = ref $value;
-        if( $isa_ref and $isa_ref ne 'ARRAY' ) {
-            croak( "Non-array reference ($isa_ref) passed to uri_for()" );
+        for ( ref $value eq 'ARRAY' ? @$value : $value ) {
+            $_ = "$_";
+            utf8::encode( $_ );
         }
-        utf8::encode( $_ ) for grep { defined } $isa_ref ? @$value : $value;
     };
     
     # join args with '/', or a blank string
@@ -1129,7 +1128,7 @@ sub execute {
 
     if ( $c->depth >= $RECURSION ) {
         my $action = "$code";
-        $action = "/$action" unless $action =~ /\-\>/;
+        $action = "/$action" unless $action =~ /->/;
         my $error = qq/Deep recursion detected calling "$action"/;
         $c->log->error($error);
         $c->error($error);
@@ -1151,6 +1150,7 @@ sub execute {
         if ( $error eq $DETACH ) { die $DETACH if $c->depth > 1 }
         else {
             unless ( ref $error ) {
+                no warnings 'uninitialized';
                 chomp $error;
                 my $class = $last->class;
                 my $name  = $last->name;
@@ -1794,7 +1794,7 @@ sub setup_components {
     );
     
     for my $component ( sort { length $a <=> length $b } $locator->plugins ) {
-        Catalyst::Utils::ensure_class_loaded( $component );
+        Catalyst::Utils::ensure_class_loaded( $component, { ignore_loaded => 1 } );
 
         my $module  = $class->setup_component( $component );
         my %modules = (