From: Brian Phillips Date: Tue, 2 Aug 2011 13:22:54 +0000 (-0500) Subject: allow parameterized types to customize their messages X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=fd197235dcb0f9db05a159a2aca0cb271c4d3c74;hp=3782156493117ca5e929019ef2da79a84a065d88;p=gitmo%2FMooseX-Dependent.git allow parameterized types to customize their messages The same arguments that are passed to the where block are also passed to the message block to allow the error message to be customized. --- diff --git a/lib/MooseX/Meta/TypeConstraint/Parameterizable.pm b/lib/MooseX/Meta/TypeConstraint/Parameterizable.pm index 44f2abc..fbef572 100644 --- a/lib/MooseX/Meta/TypeConstraint/Parameterizable.pm +++ b/lib/MooseX/Meta/TypeConstraint/Parameterizable.pm @@ -192,7 +192,7 @@ sub parameterize { constraining_value => $args, parent_type_constraint=>$self->parent_type_constraint, constraining_value_type_constraint => $self->constraining_value_type_constraint, - ($self->has_message ? (message => $self->message) : ()), + ($self->has_message ? (message => sub { $self->message->( @_, $args ) } ) : ()), ); } } diff --git a/t/08-custom-messages.t b/t/08-custom-messages.t new file mode 100644 index 0000000..b53eb6d --- /dev/null +++ b/t/08-custom-messages.t @@ -0,0 +1,24 @@ +use strict; +use warnings; + +use Test::More; +use MooseX::Types -declare=>[qw( SizedArray )]; +use MooseX::Types::Parameterizable qw(Parameterizable); +use MooseX::Types::Moose qw( Int ArrayRef ); + +ok subtype( + SizedArray, + as Parameterizable[ArrayRef,Int], + where { + my ($value, $max) = @_; + @$value > $max + }, + message { + my($value, $max) = @_; + return sprintf('%d > %d', scalar(@$value), $max); + } +), 'Created parameterized type'; + +is SizedArray([3])->get_message([1..4]), q{4 > 3}, 'custom message'; + +done_testing;