diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-06-06 17:50:16 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-06-06 17:50:16 +0000 |
commit | 5ac2026f7eed78958d69d051e7a8e993dcf51205 (patch) | |
tree | 298c3d2f08bdfe5689998b11892d72a897985be1 /lib/Moose/Exception/OverrideConflictInSummation.pm | |
download | Moose-tarball-5ac2026f7eed78958d69d051e7a8e993dcf51205.tar.gz |
Moose-2.1405HEADMoose-2.1405master
Diffstat (limited to 'lib/Moose/Exception/OverrideConflictInSummation.pm')
-rw-r--r-- | lib/Moose/Exception/OverrideConflictInSummation.pm | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/lib/Moose/Exception/OverrideConflictInSummation.pm b/lib/Moose/Exception/OverrideConflictInSummation.pm new file mode 100644 index 0000000..e88d9cc --- /dev/null +++ b/lib/Moose/Exception/OverrideConflictInSummation.pm @@ -0,0 +1,65 @@ +package Moose::Exception::OverrideConflictInSummation; +our $VERSION = '2.1405'; + +use Moose; +extends 'Moose::Exception'; + +use Moose::Util 'find_meta'; + +has 'role_application' => ( + is => 'ro', + isa => 'Moose::Meta::Role::Application::RoleSummation', + required => 1 +); + +has 'role_names' => ( + traits => ['Array'], + is => 'bare', + isa => 'ArrayRef[Str]', + handles => { + role_names => 'elements', + }, + required => 1, + documentation => "This attribute is an ArrayRef containing role names, if you want metaobjects\n". + "associated with these role names, then call method roles on the exception object.\n", +); + +has 'method_name' => ( + is => 'ro', + isa => 'Str', + required => 1 +); + +has 'two_overrides_found' => ( + is => 'ro', + isa => 'Bool', + required => 1, + default => 0 +); + +sub roles { + my $self = shift; + my @role_names = $self->role_names; + my @roles = map { find_meta($_) } @role_names; + return @roles; +} + +sub _build_message { + my $self = shift; + + my @roles = $self->role_names; + my $role_names = join "|", @roles; + + if( $self->two_overrides_found ) { + return "We have encountered an 'override' method conflict ". + "during composition (Two 'override' methods of the same name encountered). ". + "This is a fatal error."; + } + else { + return "Role '$role_names' has encountered an 'override' method conflict " . + "during composition (A local method of the same name has been found). This " . + "is a fatal error." ; + } +} + +1; |