Moose role class has ->meta in method_list since 0.90, update for that
[gitmo/Mouse.git] / lib / Mouse / Meta / Attribute.pm
index 66110e6..dfae8b2 100644 (file)
@@ -209,8 +209,7 @@ sub validate_args {
 
     confess "You cannot auto-dereference anything other than a ArrayRef or HashRef on attribute ($name)"
         if $args->{auto_deref}
-        && $args->{isa} ne 'ArrayRef'
-        && $args->{isa} ne 'HashRef';
+        && $args->{isa} !~ /^(?:ArrayRef|HashRef)(?:\[.*\])?$/;
 
     if ($args->{trigger}) {
         if (ref($args->{trigger}) eq 'HASH') {
@@ -225,20 +224,19 @@ sub validate_args {
 }
 
 sub verify_against_type_constraint {
-    return 1 unless $_[0]->{type_constraint};
+    my ($self, $value) = @_;
+    my $tc = $self->type_constraint;
+    return 1 unless $tc;
 
-    local $_ = $_[1];
-    return 1 if $_[0]->{type_constraint}->check($_);
+    local $_ = $value;
+    return 1 if $tc->check($value);
 
-    my $self = shift;
-    $self->verify_type_constraint_error($self->name, $_, $self->{type_constraint});
+    $self->verify_type_constraint_error($self->name, $value, $tc);
 }
 
 sub verify_type_constraint_error {
     my($self, $name, $value, $type) = @_;
-    $type = ref($type) eq 'ARRAY' ? join '|', map { $_->name } @{ $type } : $type->name;
-    my $display = defined($value) ? overload::StrVal($value) : 'undef';
-    Carp::confess("Attribute ($name) does not pass the type constraint because: Validation failed for \'$type\' failed with value $display");
+    Carp::confess("Attribute ($name) does not pass the type constraint because: " . $type->get_message($value));
 }
 
 sub coerce_constraint { ## my($self, $value) = @_;