summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-02-21 12:47:26 -0600
committerJesse Luehrs <doy@tozt.net>2011-02-21 12:47:26 -0600
commit7254fb6a608b1f54d52572a859356236d0a0ba2e (patch)
tree831674191eefadef8d23ef0b2f6809fd6c4241f6
parentf143c2f7abc0b026d8825640c513732853311a43 (diff)
downloadbread-board-declare-7254fb6a608b1f54d52572a859356236d0a0ba2e.tar.gz
bread-board-declare-7254fb6a608b1f54d52572a859356236d0a0ba2e.zip
ensure we always inherit from Bread::Board::Container
-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;