diff options
Diffstat (limited to 'lib/Moose/Exception/RequiredMethodsNotImplementedByClass.pm')
-rw-r--r-- | lib/Moose/Exception/RequiredMethodsNotImplementedByClass.pm | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/Moose/Exception/RequiredMethodsNotImplementedByClass.pm b/lib/Moose/Exception/RequiredMethodsNotImplementedByClass.pm new file mode 100644 index 0000000..541c169 --- /dev/null +++ b/lib/Moose/Exception/RequiredMethodsNotImplementedByClass.pm @@ -0,0 +1,30 @@ +package Moose::Exception::RequiredMethodsNotImplementedByClass; +our $VERSION = '2.1405'; + +use Moose; +extends 'Moose::Exception'; +with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::Role'; + +has 'missing_methods' => ( + traits => ['Array'], + is => 'ro', + isa => 'ArrayRef[Moose::Meta::Role::Method::Required]', + handles => { method_count => 'count', + get_method_at => 'get', + get_all_methods => 'elements', + }, + required => 1 +); + +sub _build_message { + my $self = shift; + + my $noun = $self->method_count == 1 ? 'method' : 'methods'; + my $list = Moose::Util::english_list( map { q{'} . $_ . q{'} } $self->get_all_methods ); + my ($role_name, $class_name) = ($self->role_name, $self->class_name); + + return "'$role_name' requires the $noun $list " + . "to be implemented by '$class_name'"; +} + +1; |