Skip Menu |

This queue is for tickets about the MooseX-Params-Validate CPAN distribution.

Report information
The Basics
Id: 52565
Status: resolved
Priority: 0/
Queue: MooseX-Params-Validate

People
Owner: Nobody in particular
Requestors: ian.sillitoe [...] gmail.com
Cc:
AdminCc:

Bug Information
Severity: Normal
Broken in: 0.13
Fixed in: 0.14



Subject: validated_hash fails when used in an overloaded stringify method
This is a fairly edge case - but the fix is simple enough ... package Foo; use Moose; use MooseX::Params::Validate; use overload ( qw{""} => 'to_string', ); has 'id' => ( is => 'ro', isa => 'Str', default => '1.10.100' ); sub to_string { my ($self, %args) = validated_hash( \@_, padded => { isa => 'Bool', optional => 1, default => 0 }, ); # 1.10.100 => 0001.0010.0100 my $id = $args{ padded } ? join( '.', map { sprintf( "%04d", $_ ) } split( /\./, $self->id ) ) : $self->id; return $id; } The following would fail since $instance is being evaluated (stringified) before it is returned: is( Foo->new->to_string, '1.10.100', 'to_string' ); The fix is essentially: - return ( ( $instance ? $instance : () ), %args ); + return ( ( defined $instance ? $instance : () ), %args ); (patch attached) Cheers, Ian
Subject: MooseX-Params-Validate-0.13-overload_string.patch
diff --exclude='*~' -NcrB MooseX-Params-Validate-0.13/lib/MooseX/Params/Validate.pm MooseX-Params-Validate-0.13-overload_string/lib/MooseX/Params/Validate.pm *** MooseX-Params-Validate-0.13/lib/MooseX/Params/Validate.pm Sun Nov 29 16:42:34 2009 --- MooseX-Params-Validate-0.13-overload_string/lib/MooseX/Params/Validate.pm Tue Dec 8 16:16:59 2009 *************** *** 60,66 **** called => _caller_name(), ); ! return ( ( $instance ? $instance : () ), %args ); } *validate = \&validated_hash; --- 60,66 ---- called => _caller_name(), ); ! return ( ( defined $instance ? $instance : () ), %args ); } *validate = \&validated_hash; *************** *** 108,114 **** ); return ( ! ( $instance ? $instance : () ), @args{@ordered_spec} ); } --- 108,114 ---- ); return ( ! ( defined $instance ? $instance : () ), @args{@ordered_spec} ); } diff --exclude='*~' -NcrB MooseX-Params-Validate-0.13/t/010.overloaded.t MooseX-Params-Validate-0.13-overload_string/t/010.overloaded.t *** MooseX-Params-Validate-0.13/t/010.overloaded.t Thu Jan 1 01:00:00 1970 --- MooseX-Params-Validate-0.13-overload_string/t/010.overloaded.t Tue Dec 8 16:16:06 2009 *************** *** 0 **** --- 1,36 ---- + + package Foo; + use Moose; + use MooseX::Params::Validate; + use overload ( + qw{""} => 'to_string', + ); + + has 'id' => ( is => 'ro', isa => 'Str', default => '1.10.100' ); + + sub to_string { + my ($self, %args) = validated_hash( \@_, + padded => { isa => 'Bool', optional => 1, default => 0 }, + ); + + # 1.10.100 => 0001.0010.0100 + my $id = $args{ padded } + ? join( '.', map { sprintf( "%04d", $_ ) } split( /\./, $self->id ) ) + : $self->id; + + return $id; + } + + package main; + use Test::More tests => 4; + use strict; + use warnings; + + isa_ok( my $foo = Foo->new(), 'Foo', 'new' ); + + is( $foo->id, '1.10.100', 'id' ); + + is( $foo->to_string, '1.10.100', 'to_string' ); + + is( $foo->to_string( padded => 1 ), '0001.0010.0100', 'to_string( padded => 1 )' ); +
Subject: Re: [rt.cpan.org #52565] validated_hash fails when used in an overloaded stringify method
Date: Wed, 9 Dec 2009 11:48:24 -0600 (CST)
To: Ian Sillitoe via RT <bug-MooseX-Params-Validate [...] rt.cpan.org>
From: Dave Rolsky <autarch [...] urth.org>
I don't suppose you'd like a commit bit for the moose repo? Then you can fix this yourself (although we'd have to move the module over to git first). -dave /*============================================================ http://VegGuide.org http://blog.urth.org Your guide to all that's veg House Absolute(ly Pointless) ============================================================*/
Ah - actually I already have a commit bit - I didn't know whether it was considered rude to just delve in :) --- r7979 | isillitoe | 2009-12-09 19:06:54 +0000 (Wed, 09 Dec 2009) | 5 lines Changed paths: M /MooseX-Params-Validate/trunk/README M /MooseX-Params-Validate/trunk/lib/MooseX/Params/Validate.pm A /MooseX-Params-Validate/trunk/t/010.overloaded.t - Fix so that overloaded methods do not get called accidentally (causes problems when using these functions within overloaded methods) - Tests for above - Bumped version in README so it is consistent with the current dist (0.13)
Looks like you fixed this in svn a while back but didn't update the Changes file.
RT-Send-CC: autarch [...] urth.org
Apologies - I figured you would be cc'ed on this cpan ticket and would want to do the ChangeLog yourself - still learning the way things are done I'm afraid. Thanks for your time - signing this off. Ian
RT-Send-CC: autarch [...] urth.org
Hi, I should've checked this properly before closing this ticket. I'm not entirely sure what has happened - it seems that the version in CPAN (v0.13) has the updated ChangeLog but not the actual documented changes. There should be an extra test and minor source code changes - both appear in the git repo: lib/MooseX/Params/Validate.pm t/010.overloaded.t Cheers, Ian