diff options
author | Jesse Luehrs <doy@tozt.net> | 2011-02-21 11:40:59 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2011-02-21 11:40:59 -0600 |
commit | ed3e3a9675ceb2745488ab80b27796a77eca4761 (patch) | |
tree | 64e1f6ac5c42c8a8ba3d170ab6730fba6d59aa2a /lib/MooseX | |
parent | 231745b0fd56e122e09165e1d8ffd57ae86ae749 (diff) | |
download | bread-board-declare-ed3e3a9675ceb2745488ab80b27796a77eca4761.tar.gz bread-board-declare-ed3e3a9675ceb2745488ab80b27796a77eca4761.zip |
make inheritance work
Diffstat (limited to 'lib/MooseX')
-rw-r--r-- | lib/MooseX/Bread/Board/Meta/Role/Class.pm | 17 | ||||
-rw-r--r-- | lib/MooseX/Bread/Board/Role/Object.pm | 4 |
2 files changed, 19 insertions, 2 deletions
diff --git a/lib/MooseX/Bread/Board/Meta/Role/Class.pm b/lib/MooseX/Bread/Board/Meta/Role/Class.pm index 652d0b7..9cabd88 100644 --- a/lib/MooseX/Bread/Board/Meta/Role/Class.pm +++ b/lib/MooseX/Bread/Board/Meta/Role/Class.pm @@ -2,6 +2,7 @@ package MooseX::Bread::Board::Meta::Role::Class; use Moose::Role; use Bread::Board::Service; +use List::MoreUtils qw(any); has services => ( traits => ['Array'], @@ -14,6 +15,22 @@ has services => ( }, ); +sub has_any_services { + my $self = shift; + return any { $_->has_services } + grep { Moose::Util::does_role($_, __PACKAGE__) } + map { $_->meta } + $self->linearized_isa; +} + +sub get_all_services { + my $self = shift; + return map { $_->services } + grep { Moose::Util::does_role($_, __PACKAGE__) } + map { $_->meta } + $self->linearized_isa; +} + no Moose::Role; 1; diff --git a/lib/MooseX/Bread/Board/Role/Object.pm b/lib/MooseX/Bread/Board/Role/Object.pm index e25fdf5..8846792 100644 --- a/lib/MooseX/Bread/Board/Role/Object.pm +++ b/lib/MooseX/Bread/Board/Role/Object.pm @@ -14,9 +14,9 @@ after BUILD => sub { my $self = shift; my $meta = Class::MOP::class_of($self); - return unless $meta->has_services; + return unless $meta->has_any_services; - for my $service ($meta->services) { + for my $service ($meta->get_all_services) { if ($service->isa('MooseX::Bread::Board::BlockInjection')) { my $block = $service->block; $self->add_service( |