added typeconstraint's customizable error message support.
[gitmo/Mouse.git] / lib / Mouse / Meta / TypeConstraint.pm
index 7b584bf..538e3b2 100644 (file)
@@ -14,7 +14,11 @@ sub new {
         $check = $check->{_compiled_type_constraint};
     }
 
-    bless +{ name => $name, _compiled_type_constraint => $check }, $class;
+    bless +{
+        name                      => $name,
+        _compiled_type_constraint => $check,
+        message                   => $args{message}
+    }, $class;
 }
 
 sub name { shift->{name} }
@@ -24,6 +28,25 @@ sub check {
     $self->{_compiled_type_constraint}->(@_);
 }
 
+sub message {
+    return $_[0]->{message};
+}
+
+sub get_message {
+    my ($self, $value) = @_;
+    if ( my $msg = $self->message ) {
+        local $_ = $value;
+        return $msg->($value);
+    }
+    else {
+        $value = ( defined $value ? overload::StrVal($value) : 'undef' );
+        return
+            "Validation failed for '"
+          . $self->name
+          . "' failed with value $value";
+    }
+}
+
 1;
 __END__