support hashref for params in uri_for
Marcus Ramberg [Wed, 15 Feb 2006 14:30:17 +0000 (14:30 +0000)]
Changes
lib/Catalyst.pm
t/unit_core_uri_for.t

diff --git a/Changes b/Changes
index d8264b2..7cc1b0f 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,7 @@
 This file documents the revision history for Perl extension Catalyst.
 
+       - Support optional hashref as last param for parameters in uri_for.
+
 5.64    2006-02-07 20:29:00
         - Fixed bug in FastCGI proc manager mode where pm_post_dispatch
           was not run. (Eric Wong)
index 25b2c7a..d93707f 100644 (file)
@@ -717,12 +717,15 @@ sub uri_for {
     $namespace = '' if $path =~ /^\//;
     $path =~ s/^\///;
 
+    my $params = (scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {});
+
     # join args with '/', or a blank string
     my $args = ( scalar @args ? '/' . join( '/', @args ) : '' );
     $args =~ s/^\/// unless $path;
     my $res =
       URI->new_abs( URI->new_abs( "$path$args", "$basepath$namespace" ), $base )
       ->canonical;
+    $res->query_form(%$params);
     $res;
 }
 
index c6726f6..f46e2fd 100644 (file)
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 7;
+use Test::More tests => 8;
 use Test::MockObject;
 use URI;
 
@@ -36,6 +36,12 @@ is(
 is( Catalyst::uri_for( $context, '../quux' )->as_string,
     'http://127.0.0.1/foo/quux', 'URI for relative dot path' );
 
+is(
+    Catalyst::uri_for( $context, 'quux', { param1 => 'value1' } )->as_string,
+    'http://127.0.0.1/foo/yada/quux?param1=value1',
+    'URI for undef action with query params'
+);
+
 $request->mock( 'base',  sub { URI->new('http://localhost:3000/') } );
 $request->mock( 'match', sub { 'orderentry/contract' } );
 is(