Merge pull request #3 from brianphillips/master master
jjn1056 [Tue, 2 Aug 2011 13:45:45 +0000 (06:45 -0700)]
Customized error messages for parameterized types

lib/MooseX/Meta/TypeConstraint/Parameterizable.pm
t/07-no-message.t
t/08-custom-messages.t [new file with mode: 0644]

index 44f2abc..fbef572 100644 (file)
@@ -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 ) } ) : ()),
                 );
             }
         }
index 4cb4219..e615112 100644 (file)
@@ -19,7 +19,7 @@ use Test::More;
         $int >= length($string) ? 1:0;
       };
 
-       has short_string => ( is => 'rw', isa => Varchar[5] );
+    has short_string => ( is => 'rw', isa => Varchar[5] );
 }
 
 my $obj = Test::MyMooseClass->new(short_string => 'four');
diff --git a/t/08-custom-messages.t b/t/08-custom-messages.t
new file mode 100644 (file)
index 0000000..b53eb6d
--- /dev/null
@@ -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;