diff options
author | Jesse Luehrs <doy@tozt.net> | 2011-02-21 12:47:26 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2011-02-21 12:47:26 -0600 |
commit | 7254fb6a608b1f54d52572a859356236d0a0ba2e (patch) | |
tree | 831674191eefadef8d23ef0b2f6809fd6c4241f6 | |
parent | f143c2f7abc0b026d8825640c513732853311a43 (diff) | |
download | bread-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.pm | 11 | ||||
-rw-r--r-- | t/34-extends.t | 22 |
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; |