From f3b0919453a6a370af34ee6f2e23dc8e0e251b42 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 25 May 2011 13:57:45 -0500 Subject: make inference explicit --- lib/Bread/Board/Declare/Meta/Role/Attribute.pm | 14 ++++++++++++++ lib/Bread/Board/Declare/Role/Object.pm | 1 + t/50-infer.t | 22 ++++++++++++++-------- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/lib/Bread/Board/Declare/Meta/Role/Attribute.pm b/lib/Bread/Board/Declare/Meta/Role/Attribute.pm index a6114ea..1eabba1 100644 --- a/lib/Bread/Board/Declare/Meta/Role/Attribute.pm +++ b/lib/Bread/Board/Declare/Meta/Role/Attribute.pm @@ -83,6 +83,20 @@ has dependencies => ( predicate => 'has_dependencies', ); +=attr infer + +If true, the dependency list will be inferred as much as possible from the +attributes in the class. See L for +more information. Note that this is only valid for constructor injection +services. + +=cut + +has infer => ( + is => 'ro', + isa => 'Bool', +); + =attr constructor_name The constructor name to use when creating L diff --git a/lib/Bread/Board/Declare/Role/Object.pm b/lib/Bread/Board/Declare/Role/Object.pm index 9d4a938..34fbf3e 100644 --- a/lib/Bread/Board/Declare/Role/Object.pm +++ b/lib/Bread/Board/Declare/Role/Object.pm @@ -31,6 +31,7 @@ after BUILD => sub { ); } elsif ($service->isa('Bread::Board::Declare::ConstructorInjection') + && $service->associated_attribute->infer && (my $meta = Class::MOP::class_of($service->class))) { my $inferred = Bread::Board::Service::Inferred->new( current_container => $self, diff --git a/t/50-infer.t b/t/50-infer.t index 75879fa..983e1a3 100644 --- a/t/50-infer.t +++ b/t/50-infer.t @@ -48,8 +48,9 @@ use Test::Fatal; use Bread::Board::Declare; has baz => ( - is => 'ro', - isa => 'Baz', + is => 'ro', + isa => 'Baz', + infer => 1, ); } @@ -82,8 +83,9 @@ use Test::Fatal; use Bread::Board::Declare; has baz => ( - is => 'ro', - isa => 'Baz2', + is => 'ro', + isa => 'Baz2', + infer => 1, ); } @@ -115,6 +117,7 @@ use Test::Fatal; has baz => ( is => 'ro', isa => 'Baz2', + infer => 1, dependencies => ['thing'], ); } @@ -164,8 +167,9 @@ use Test::Fatal; ); has quux => ( - is => 'ro', - isa => 'Quux', + is => 'ro', + isa => 'Quux', + infer => 1, ); has foo => ( @@ -177,6 +181,7 @@ use Test::Fatal; has quux2 => ( is => 'ro', isa => 'Quux', + infer => 1, dependencies => ['foo'], ); } @@ -229,8 +234,9 @@ use Test::Fatal; ); has controller => ( - is => 'ro', - isa => 'Controller', + is => 'ro', + isa => 'Controller', + infer => 1, ); } -- cgit v1.2.3-54-g00ecf