Re[2]: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-06-01 Thread Dmitriy S. Sinyavskiy
Hello, Matt.
You write 30 мая 2008 г., 11:05:49:

MST> On Thu, May 29, 2008 at 06:17:32PM +0400, Dmitriy S. Sinyavskiy wrote:
>> Folks, what about the problem?
>> Did you test my last patch?

MST> We're still waiting for one to test.

MST> You've not yet AFAIK posted one that's (a) a full diff -ur including tests
MST> (b) has no pointless whitespaces changes.


As I remember the diff without pointless spaces was here 
http://www.mail-archive.com/catalyst@lists.scsys.co.uk/msg03184.html
The test http://www.mail-archive.com/catalyst@lists.scsys.co.uk/msg03247.html

If you prefer to see it together, look:

Index: t/unit_core_uri_for.t
===
--- t/unit_core_uri_for.t   (revision 7807)
+++ t/unit_core_uri_for.t   (working copy)
@@ -59,6 +59,23 @@
 'URI for undef action with query params in unicode'
 );
 
+# test encode first argument with utf-8,
+{
+$request->base( URI->new('http://127.0.0.1/') );
+
+$context->namespace('');
+
+is( Catalyst::uri_for( $context, '/animal/ёж', 'чёт', { param1 => "щуп" 
})->as_string,
+'http://127.0.0.1/animal/%D1%91%D0%B6/%D1%87%D1%91%D1%82?param1=%D1%89%D1%83%D0%BF',
+'URI for with first param as string in unicode'
+);
+
+is( Catalyst::uri_for( $context, '/??', '?', { param1 => "?" })->as_string,
+'http://127.0.0.1/%3F%3F/%3F?param1=%3F',
+'URI for with special char  in args and param'
+);
+
+
 # test with object
 is(
 Catalyst::uri_for( $context, 'quux', { param1 => $request->base } 
)->as_string,
Index: lib/Catalyst.pm
===
--- lib/Catalyst.pm (revision 7807)
+++ lib/Catalyst.pm (working copy)
@@ -948,10 +948,12 @@
 my $params =
   ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} );
 
+$path =~ s!/+!/!g; # strip extra slashes '///'
+unshift(@args, split('/', $path));
 carp "uri_for called with undef argument" if grep { ! defined $_ } @args;
 s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args;
 
-unshift(@args, $path);
+
 
 unless (defined $path && $path =~ s!^/!!) { # in-place strip
 my $namespace = $c->namespace;



-- 
 dreelmailto:[EMAIL PROTECTED]
 Dmitriy S. Sinyavskiy
 Web-developerPerl, Catalyst, MSSQL
 FGUE EZANTelecommunication, data transfer networks and devices.


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-30 Thread Matt S Trout
On Thu, May 29, 2008 at 06:17:32PM +0400, Dmitriy S. Sinyavskiy wrote:
> Folks, what about the problem?
> Did you test my last patch?

We're still waiting for one to test.

You've not yet AFAIK posted one that's (a) a full diff -ur including tests
(b) has no pointless whitespaces changes.

-- 
  Matt S Trout   Need help with your Catalyst or DBIx::Class project?
   Technical Directorhttp://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://chainsawblues.vox.com/http://www.shadowcat.co.uk/servers/

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-29 Thread Dmitriy S. Sinyavskiy
Folks, what about the problem?
Did you test my last patch?




-- 
 dreelmailto:[EMAIL PROTECTED]
 Dmitriy S. Sinyavskiy
 Web-developerPerl, Catalyst, MSSQL
 FGUE EZANTelecommunication, data transfer networks and 
devices.  


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re[6]: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-23 Thread Dmitriy S. Sinyavskiy
Hello, Dmitriy.
You write 23 мая 2008 г., 23:48:56:

DSS> Hello, J..
DSS> You write 23 мая 2008 г., 0:18:11:

JS>> On Thu, May 22, 2008 at 10:05 AM, Dmitriy S. Sinyavskiy <[EMAIL 
PROTECTED]> wrote:
>>>
>>> People? what about my patch? I heven't got received any response.
>>> I'll be glad to now some news.
>>> Thanks.
>>>

JS>> Your mailserver is rejecting mail.  I suggest fixing your mail server
JS>> or viewing the list archives to make sure that you're not missing
JS>> things.

JS>> Thread:
JS>> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/msg02771.html


DSS> Test. Must be saved as UTF-8:
DSS> =
DSS> use strict;
DSS> use warnings;

DSS> use Test::More 'no_plan';
DSS> use URI;

DSS> use_ok('Catalyst');

DSS> my $request = Catalyst::Request->new( {
base =>> URI->new('http://127.0.0.1/foo')
DSS> } );

DSS> my $context = Catalyst->new( {
request =>> $request,
namespace =>> 'yada',
DSS> } );

DSS> # test encode first argument with utf-8,
DSS> {
$request->>base( URI->new('http://127.0.0.1/') );

$context->>namespace('');

DSS> is( Catalyst::uri_for( $context, '/animal/ёж', 'чёт', { param1 => "щуп" 
})->as_string,
DSS> 
'http://127.0.0.1/animal/%D1%91%D0%B6/%D1%87%D1%91%D1%82?param1=%C3%91%C2%89%C3%91%C2%83%C3%90%C2%BF',
DSS> 'URI for undef action with first param as string in unicode'
DSS> );
DSS> }

The previous test was wrong, sorry. I've found a mistake and correct
it. Test case including check for special chars .

Tested today - it's working right with patch.

Test
=

use strict;
use warnings;

use Test::More 'no_plan';
use URI;

use_ok('Catalyst');

my $request = Catalyst::Request->new( {
base => URI->new('http://127.0.0.1/foo')
} );

my $context = Catalyst->new( {
request => $request,
namespace => 'yada',
} );

# test encode first argument with utf-8,
{
$request->base( URI->new('http://127.0.0.1/') );

$context->namespace('');

is( Catalyst::uri_for( $context, '/animal/ёж', 'чёт', { param1 => "щуп" 
})->as_string,
'http://127.0.0.1/animal/%D1%91%D0%B6/%D1%87%D1%91%D1%82?param1=%D1%89%D1%83%D0%BF',
'URI for with first param as string in unicode'
);

is( Catalyst::uri_for( $context, '/??', '?', { param1 => "?" })->as_string,
'http://127.0.0.1/%3F%3F/%3F?param1=%3F',
'URI for with special char  in args and param'
);

}




-- 
 dreelmailto:[EMAIL PROTECTED]
 Dmitriy S. Sinyavskiy
 Web-developerPerl, Catalyst, MSSQL
 FGUE EZANTelecommunication, data transfer networks and 
devices.  


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re[5]: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-23 Thread Dmitriy S. Sinyavskiy
Hello, J..
You write 23 мая 2008 г., 0:18:11:

JS> On Thu, May 22, 2008 at 10:05 AM, Dmitriy S. Sinyavskiy <[EMAIL PROTECTED]> 
wrote:
>>
>> People? what about my patch? I heven't got received any response.
>> I'll be glad to now some news.
>> Thanks.
>>

JS> Your mailserver is rejecting mail.  I suggest fixing your mail server
JS> or viewing the list archives to make sure that you're not missing
JS> things.

JS> Thread:
JS> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/msg02771.html


Test. Must be saved as UTF-8:
=
use strict;
use warnings;

use Test::More 'no_plan';
use URI;

use_ok('Catalyst');

my $request = Catalyst::Request->new( {
base => URI->new('http://127.0.0.1/foo')
} );

my $context = Catalyst->new( {
request => $request,
namespace => 'yada',
} );

# test encode first argument with utf-8,
{
$request->base( URI->new('http://127.0.0.1/') );

$context->namespace('');

is( Catalyst::uri_for( $context, '/animal/ёж', 'чёт', { param1 => "щуп" 
})->as_string,
'http://127.0.0.1/animal/%D1%91%D0%B6/%D1%87%D1%91%D1%82?param1=%C3%91%C2%89%C3%91%C2%83%C3%90%C2%BF',
'URI for undef action with first param as string in unicode'
);
}


-- 
 dreelmailto:[EMAIL PROTECTED]
 Dmitriy S. Sinyavskiy
 Web-developerPerl, Catalyst, MSSQL
 FGUE EZANTelecommunication, data transfer networks and 
devices.  


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: Re[3]: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-22 Thread J. Shirley
On Thu, May 22, 2008 at 10:05 AM, Dmitriy S. Sinyavskiy <[EMAIL PROTECTED]> 
wrote:
>
> People? what about my patch? I heven't got received any response.
> I'll be glad to now some news.
> Thanks.
>

Your mailserver is rejecting mail.  I suggest fixing your mail server
or viewing the list archives to make sure that you're not missing
things.

Thread: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/msg02771.html

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-22 Thread Chisel Wright
On Thu, May 22, 2008 at 09:05:40PM +0400, Dmitriy S. Sinyavskiy wrote:
> 
> People? what about my patch? I heven't got received any response.
> I'll be glad to now some news.
> Thanks.

Check the archives - you had a reply a few days ago - "patch looks ok,
but no tests" was the gist I think.


-- 
Chisel Wright
e: [EMAIL PROTECTED]
w: http://www.herlpacker.co.uk/

  Q: What's tiny and yellow and very, very, dangerous?
  A: A canary with the super-user password.

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re[3]: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-22 Thread Dmitriy S. Sinyavskiy

People? what about my patch? I heven't got received any response.
I'll be glad to now some news.
Thanks.

-- 
 dreelmailto:[EMAIL PROTECTED]
 Dmitriy S. Sinyavskiy
 Web-developerPerl, Catalyst, MSSQL
 FGUE EZANTelecommunication, data transfer networks and 
devices.  




___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-16 Thread Jonathan Rockway
* On Sat, May 17 2008, Dmitriy S. Sinyavskiy wrote:
> It strange I haven't got received letter with this...may be deleted
> by antispam (

Yes, your mailserver rejected my reply.  However, the list did receive
it.

> Nevertheless I've done it now:
>
> Index: Catalyst.pm
> ===
> --- Catalyst.pm   (revision 7759)
> +++ Catalyst.pm   (working copy)
> @@ -948,10 +948,12 @@
>  my $params =
>( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} );
>  
> +$path =~ s!/+!/!g; # strip extra slashes '///'
> +unshift(@args, split('/', $path));
>  carp "uri_for called with undef argument" if grep { ! defined $_ } @args;
>  s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args;
>  
> -unshift(@args, $path);
> +
>  
>  unless (defined $path && $path =~ s!^/!!) { # in-place strip
>  my $namespace = $c->namespace;

OK, but it looks like you forgot the tests. :) However, I think the
patch is sound.  Please check that things like:

  uri_for('/controller/ほげ')
  *click that link*
  
dispatch correctly, though.

Regards,
Jonathan Rockway

-- 
print just => another => perl => hacker => if $,=$"

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re[2]: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-16 Thread Dmitriy S. Sinyavskiy
Hello, J..
You write 16 мая 2008 г., 4:27:07:

JS> On Thu, May 15, 2008 at 11:50 PM, Dmitriy S. Sinyavskiy <[EMAIL PROTECTED]> 
wrote:
>>  So what about my patch and test?
>>  Is it right or someone can correct it?
>>  The silence is here for a week or more (
>>


JS> Jonathan Rockway asked you to regenerate without whitespace changes.

JS> Just waiting on that from you to properly review it.

JS> -J


It strange I haven't got received letter with this...may be deleted
by antispam (
Nevertheless I've done it now:

Index: Catalyst.pm
===
--- Catalyst.pm (revision 7759)
+++ Catalyst.pm (working copy)
@@ -948,10 +948,12 @@
 my $params =
   ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} );
 
+$path =~ s!/+!/!g; # strip extra slashes '///'
+unshift(@args, split('/', $path));
 carp "uri_for called with undef argument" if grep { ! defined $_ } @args;
 s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args;
 
-unshift(@args, $path);
+
 
 unless (defined $path && $path =~ s!^/!!) { # in-place strip
 my $namespace = $c->namespace;



-- 
 dreelmailto:[EMAIL PROTECTED]
 Dmitriy S. Sinyavskiy
 Web-developerPerl, Catalyst, MSSQL
 FGUE EZANTelecommunication, data transfer networks and 
devices.  


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-15 Thread J. Shirley
On Thu, May 15, 2008 at 11:50 PM, Dmitriy S. Sinyavskiy <[EMAIL PROTECTED]> 
wrote:
>  So what about my patch and test?
>  Is it right or someone can correct it?
>  The silence is here for a week or more (
>


Jonathan Rockway asked you to regenerate without whitespace changes.

Just waiting on that from you to properly review it.

-J

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-15 Thread Dmitriy S. Sinyavskiy
 So what about my patch and test?
 Is it right or someone can correct it?
 The silence is here for a week or more (

-- 
 dreelmailto:[EMAIL PROTECTED]
 Dmitriy S. Sinyavskiy
 Web-developerPerl, Catalyst, MSSQL
 FGUE EZANTelecommunication, data transfer networks and 
devices.  


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-06 Thread Jonathan Rockway
* On Tue, May 06 2008, Dmitriy S. Sinyavskiy wrote:
> The -diff
>
> Index: Catalyst.pm
> ===

Please regenerate this diff without the whitespace changes.  It is
completely unreadable in the current form.

Examples:

> -  engine_class context_class request_class response_class stats_class 
> +  engine_class context_class request_class response_class stats_class

> -
> +

> -$c->stash->{data} = 
> +$c->stash->{data} =

These spurious changes fuck up the history (when we apply the patch),
and they make it extremely difficult to review your changes.

GNU diff accepts an "--ignore-space-change" option that should remove
these extra changes.

Regards,
Jonathan Rockway

-- 
print just => another => perl => hacker => if $,=$"

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re[2]: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-06 Thread Dmitriy S. Sinyavskiy
The -diff

Index: Catalyst.pm
===
--- Catalyst.pm (revision 7629)
+++ Catalyst.pm (working copy)
@@ -54,7 +54,7 @@
 
 __PACKAGE__->mk_classdata($_)
   for qw/components arguments dispatcher engine log dispatcher_class
-  engine_class context_class request_class response_class stats_class 
+  engine_class context_class request_class response_class stats_class
   setup_finished/;
 
 __PACKAGE__->dispatcher_class('Catalyst::Dispatcher');
@@ -112,30 +112,30 @@
 
 ### in lib/MyApp.pm
 use Catalyst qw/-Debug/; # include plugins here as well
-
+
 ### In lib/MyApp/Controller/Root.pm (autocreated)
 sub foo : Global { # called for /foo, /foo/1, /foo/1/2, etc.
 my ( $self, $c, @args ) = @_; # args are qw/1 2/ for /foo/1/2
 $c->stash->{template} = 'foo.tt'; # set the template
 # lookup something from db -- stash vars are passed to TT
-$c->stash->{data} = 
+$c->stash->{data} =
   $c->model('Database::Foo')->search( { country => $args[0] } );
 if ( $c->req->params->{bar} ) { # access GET or POST parameters
 $c->forward( 'bar' ); # process another action
-# do something else after forward returns
+# do something else after forward returns
 }
 }
-
+
 # The foo.tt TT template can use the stash data from the database
 [% WHILE (item = data.next) %]
 [% item.foo %]
 [% END %]
-
+
 # called for /bar/of/soap, /bar/of/soap/10, etc.
 sub bar : Path('/bar/of/soap') { ... }
 
 # called for all actions, from the top-most controller downwards
-sub auto : Private { 
+sub auto : Private {
 my ( $self, $c ) = @_;
 if ( !$c->user_exists ) { # Catalyst::Plugin::Authentication
 $c->res->redirect( '/login' ); # require login
@@ -143,9 +143,9 @@
 }
 return 1; # success; carry on to next action
 }
-
+
 # called after all actions are finished
-sub end : Private { 
+sub end : Private {
 my ( $self, $c ) = @_;
 if ( scalar @{ $c->error } ) { ... } # handle errors
 return if $c->res->body; # already have a response
@@ -155,20 +155,20 @@
 ### in MyApp/Controller/Foo.pm
 # called for /foo/bar
 sub bar : Local { ... }
-
+
 # called for /blargle
 sub blargle : Global { ... }
-
+
 # an index action matches /foo, but not /foo/1, etc.
 sub index : Private { ... }
-
+
 ### in MyApp/Controller/Foo/Bar.pm
 # called for /foo/bar/baz
 sub baz : Local { ... }
-
+
 # first Root auto is called, then Foo auto, then this
 sub auto : Private { ... }
-
+
 # powerful regular expression paths are also possible
 sub details : Regex('^product/(\w+)/details$') {
 my ( $self, $c ) = @_;
@@ -249,7 +249,7 @@
 environment settings override the application, with _STATS having the
 highest priority.
 
-e.g. 
+e.g.
 
use Catalyst qw/-Stats=1/
 
@@ -320,8 +320,8 @@
 
 =head2 $c->detach()
 
-The same as C, but doesn't return to the previous action when 
-processing is finished. 
+The same as C, but doesn't return to the previous action when
+processing is finished.
 
 When called with no arguments it escapes the processing chain entirely.
 
@@ -348,7 +348,7 @@
 $c->stash->{foo} = $bar;
 $c->stash( { moose => 'majestic', qux => 0 } );
 $c->stash( bar => 1, gorch => 2 ); # equivalent to passing a hashref
-
+
 # stash is automatically passed to the view for use in a template
 $c->forward( 'MyApp::View::TT' );
 
@@ -456,7 +456,7 @@
 return $comp;
 }
 
-# Find possible names for a prefix 
+# Find possible names for a prefix
 
 sub _comp_names {
 my ( $c, @prefixes ) = @_;
@@ -528,7 +528,7 @@
 
 Any extra arguments are directly passed to ACCEPT_CONTEXT.
 
-If the name is omitted, it will look for 
+If the name is omitted, it will look for
  - a model object in $c->stash{current_model_instance}, then
  - a model name in $c->stash->{current_model}, then
  - a config setting 'default_model', or
@@ -542,7 +542,7 @@
 @args )
   if $name;
 if (ref $c) {
-return $c->stash->{current_model_instance} 
+return $c->stash->{current_model_instance}
   if $c->stash->{current_model_instance};
 return $c->model( $c->stash->{current_model} )
   if $c->stash->{current_model};
@@ -573,7 +573,7 @@
 
 Any extra arguments are directly passed to ACCEPT_CONTEXT.
 
-If the name is omitted, it will look for 
+If the name is omitted, it will look for
  - a view object in $c->stash{current_view_instance}, then
  - a view name in $c->stash->{current_view}, then
  - a config setting 'default_view', or
@@ -587,7 +587,7 @@
 @args )
   if $name;
 if (ref $c) {
-return $c->stash->{current_view_instance} 
+return $c->stash->{current_view_instance}
   if $c->stash->{current_view

Re: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-05-03 Thread Matt S Trout
If you're going to resubmit a patch, please do so as a diff -ur or
'svn diff' or 'svk diff' to the list, and send it as plain text rather
than application/octet-stream.

-- 
  Matt S Trout   Need help with your Catalyst or DBIx::Class project?
   Technical Directorhttp://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://chainsawblues.vox.com/http://www.shadowcat.co.uk/servers/

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] uri_for() doesn't encode to utf8 first argument

2008-04-22 Thread Matt S Trout
On Tue, Apr 22, 2008 at 07:30:51PM +0400, dreel wrote:
> 
> Version Catalyst 5.7012
> For example, I want to use as first arg the string: 
> uri_for('/controller/*some_param1*','arg1','arg2') 
> If *some_param1* contains non-ascii symbols it must be encoded as 
> URI::Escape, but it missed.
> 
> I've tested it with Russian symbols:
> $c->uri_for('/network/МСК') returns string http://localhost:3000/network/МСК' 
> wrong! not-encoded!;
> $c->uri_for('/network','МСК') returns string 
> http://localhost:3000/network/%CC%D1%CA right.
> 
> So what we get if uri wasn't encoded? Browser incompatibility! IE by default 
> encode all URIs with UTF-8,
> but FF using system charset (win-1251 for me). Most of URIs become broken.
> 
> I've found out the way to correct it. In Catalyst.pm
> The block where we encode @args for uri_for:
> 945: my $params =
> 946:  ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} );
> 
> 948: carp "uri_for called with undef argument" if grep { ! defined $_ } @args;
> s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args;
> unshift(@args, $path); # !!!add UNencoded $path!!!
> 
> Sorry, can't sync with svn, so plain text used (
> My correction:
> 945: my $params =
>   ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} );
> 
> + $path =~ s!/+!/!g; # strip extra slashes '///'
> + my @path_args = split('/', $path);
> + unshift(@args, @path_args);
> carp "uri_for called with undef argument" if grep { ! defined $_ } @args;
> s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args;
> -unshift(@args, $path);
> 
> It this case all data will be encoded.
> 
> Any suggestions?

$c->uri_for($c->controller('Network')->action_for('root'), 'some_param1', 
'arg1', 'arg2');

is a better approach to this and will encode correctly.

Your patch looks like it -might- work, but you don't seem to have provided
an addition to the test suite so we can't apply it.

-- 
  Matt S Trout   Need help with your Catalyst or DBIx::Class project?
   Technical Directorhttp://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://chainsawblues.vox.com/http://www.shadowcat.co.uk/servers/

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


[Catalyst] uri_for() doesn't encode to utf8 first argument

2008-04-22 Thread dreel

Version Catalyst 5.7012
For example, I want to use as first arg the string: 
uri_for('/controller/*some_param1*','arg1','arg2') 
If *some_param1* contains non-ascii symbols it must be encoded as URI::Escape, 
but it missed.

I've tested it with Russian symbols:
$c->uri_for('/network/МСК') returns string http://localhost:3000/network/МСК' 
wrong! not-encoded!;
$c->uri_for('/network','МСК') returns string 
http://localhost:3000/network/%CC%D1%CA right.

So what we get if uri wasn't encoded? Browser incompatibility! IE by default 
encode all URIs with UTF-8,
but FF using system charset (win-1251 for me). Most of URIs become broken.

I've found out the way to correct it. In Catalyst.pm
The block where we encode @args for uri_for:
945: my $params =
946:  ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} );

948: carp "uri_for called with undef argument" if grep { ! defined $_ } @args;
s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args;
unshift(@args, $path); # !!!add UNencoded $path!!!

Sorry, can't sync with svn, so plain text used (
My correction:
945: my $params =
  ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} );

+   $path =~ s!/+!/!g; # strip extra slashes '///'
+   my @path_args = split('/', $path);
+   unshift(@args, @path_args);
carp "uri_for called with undef argument" if grep { ! defined $_ } @args;
s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args;
-unshift(@args, $path);

It this case all data will be encoded.

Any suggestions?
--
dr.eel


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/