X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMouse.git;a=blobdiff_plain;f=lib%2FMouse%2FUtil%2FTypeConstraints.pm;h=8694163662210f485c880f992e52ee136291dfad;hp=97551151c0f64f104dc311b4e24243c353eaf840;hb=a497c7d3c518bbecf930e3f17d7a75b9bf84fa2f;hpb=993e62a7ae7e1e7711e8f603e69641bd131c47ff diff --git a/lib/Mouse/Util/TypeConstraints.pm b/lib/Mouse/Util/TypeConstraints.pm index 9755115..8694163 100644 --- a/lib/Mouse/Util/TypeConstraints.pm +++ b/lib/Mouse/Util/TypeConstraints.pm @@ -6,7 +6,8 @@ use base 'Exporter'; use Carp (); use Scalar::Util qw/blessed looks_like_number openhandle/; -use Mouse::Util; +use Mouse::Util qw(does_role); +use Mouse::Meta::Module; # class_of use Mouse::Meta::TypeConstraint; our @EXPORT = qw( @@ -215,10 +216,11 @@ sub class_type { if ($conf && $conf->{class}) { # No, you're using this wrong warn "class_type() should be class_type(ClassName). Perhaps you're looking for subtype $name => as '$conf->{class}'?"; - subtype($name, as => $conf->{class}); - } else { - subtype( - $name => where => sub { $_->isa($name) } + subtype $name, as => $conf->{class}; + } + else { + subtype $name => ( + where => sub { blessed($_) && $_->isa($name) }, ); } } @@ -226,11 +228,8 @@ sub class_type { sub role_type { my($name, $conf) = @_; my $role = $conf->{role}; - subtype( - $name => where => sub { - return unless defined $_ && ref($_) && $_->isa('Mouse::Object'); - $_->meta->does_role($role); - } + subtype $name => ( + $name => where => sub { does_role($_, $role) }, ); }