summaryrefslogtreecommitdiff
path: root/lib/Moose/Exception/OverrideConflictInSummation.pm
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2015-06-06 17:50:16 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2015-06-06 17:50:16 +0000
commit5ac2026f7eed78958d69d051e7a8e993dcf51205 (patch)
tree298c3d2f08bdfe5689998b11892d72a897985be1 /lib/Moose/Exception/OverrideConflictInSummation.pm
downloadMoose-tarball-5ac2026f7eed78958d69d051e7a8e993dcf51205.tar.gz
Diffstat (limited to 'lib/Moose/Exception/OverrideConflictInSummation.pm')
-rw-r--r--lib/Moose/Exception/OverrideConflictInSummation.pm65
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;