summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-02-21 11:40:59 -0600
committerJesse Luehrs <doy@tozt.net>2011-02-21 11:40:59 -0600
commited3e3a9675ceb2745488ab80b27796a77eca4761 (patch)
tree64e1f6ac5c42c8a8ba3d170ab6730fba6d59aa2a /lib
parent231745b0fd56e122e09165e1d8ffd57ae86ae749 (diff)
downloadbread-board-declare-ed3e3a9675ceb2745488ab80b27796a77eca4761.tar.gz
bread-board-declare-ed3e3a9675ceb2745488ab80b27796a77eca4761.zip
make inheritance work
Diffstat (limited to 'lib')
-rw-r--r--lib/MooseX/Bread/Board/Meta/Role/Class.pm17
-rw-r--r--lib/MooseX/Bread/Board/Role/Object.pm4
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(