summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/MooseX/Bread/Board/Meta/Role/Class.pm11
-rw-r--r--t/34-extends.t22
2 files changed, 33 insertions, 0 deletions
diff --git a/lib/MooseX/Bread/Board/Meta/Role/Class.pm b/lib/MooseX/Bread/Board/Meta/Role/Class.pm
index 9cabd88..47c34bd 100644
--- a/lib/MooseX/Bread/Board/Meta/Role/Class.pm
+++ b/lib/MooseX/Bread/Board/Meta/Role/Class.pm
@@ -31,6 +31,17 @@ sub get_all_services {
$self->linearized_isa;
}
+before superclasses => sub {
+ my $self = shift;
+
+ return unless @_;
+ return if any { $_->isa('Bread::Board::Container') } @_;
+
+ die "Cannot inherit from " . join(', ', @_)
+ . " because MooseX::Bread::Board classes must inherit"
+ . " from Bread::Board::Container";
+};
+
no Moose::Role;
1;
diff --git a/t/34-extends.t b/t/34-extends.t
new file mode 100644
index 0000000..bb66271
--- /dev/null
+++ b/t/34-extends.t
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+use Test::Fatal;
+
+{
+ package Bar;
+ use Moose;
+}
+
+{
+ package Foo;
+ use Moose;
+ use MooseX::Bread::Board;
+
+ ::like(::exception { extends 'Bar' },
+ qr/^Cannot inherit from Bar because MooseX::Bread::Board classes must inherit from Bread::Board::Container/,
+ "error when inheriting from a non-container");
+}
+
+done_testing;