package Mouse::Util::TypeConstraints;
-use Mouse::Util qw(does_role not_supported); # enables strict and warnings
+use Mouse::Util; # enables strict and warnings
use Carp ();
use Scalar::Util ();
# RoleType
return _create_type 'subtype', $name => (
as => 'Object',
- optimized_as => sub { Scalar::Util::blessed($_[0]) && does_role($_[0], $role) },
+ optimized_as => sub {
+ return Scalar::Util::blessed($_[0])
+ && Mouse::Util::does_role($_[0], $role);
+ },
);
}
sub duck_type {
my($name, @methods);
- if(!(@_ == 1 && ref($_[0]) eq 'ARRAY')){
+ if(ref($_[0]) ne 'ARRAY'){
$name = shift;
}
return _create_type 'subtype', $name => (
as => 'Object',
optimized_as => Mouse::Util::generate_can_predicate_for(\@methods),
+ message => sub {
+ my($object) = @_;
+ my @missing = grep { !$object->can($_) } @methods;
+ return ref($object)
+ . ' is missing methods '
+ . Mouse::Util::quoted_english_list(@missing);
+ },
);
}
$name = shift;
}
- %valid = map{ $_ => undef } (@_ == 1 && ref($_[0]) eq 'ARRAY' ? @{$_[0]} : @_);
+ %valid = map{ $_ => undef }
+ (@_ == 1 && ref($_[0]) eq 'ARRAY' ? @{$_[0]} : @_);
# EnumType
return _create_type 'subtype', $name => (
as => 'Str',
- optimized_as => sub{ defined($_[0]) && !ref($_[0]) && exists $valid{$_[0]} },
+ optimized_as => sub{
+ return defined($_[0]) && !ref($_[0]) && exists $valid{$_[0]};
+ },
);
}
=head1 VERSION
-This document describes Mouse version 0.68
+This document describes Mouse version 0.71
=head2 SYNOPSIS