summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
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(