diff options
author | Jesse Luehrs <doy@tozt.net> | 2011-05-25 13:57:45 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2011-05-25 14:02:09 -0500 |
commit | f3b0919453a6a370af34ee6f2e23dc8e0e251b42 (patch) | |
tree | 5a1a4227ac0a3d96ade44750a3ed8e3e3401cff6 | |
parent | bbb409dcc33fe109968c6330b555fa72ab3f8e31 (diff) | |
download | bread-board-declare-f3b0919453a6a370af34ee6f2e23dc8e0e251b42.tar.gz bread-board-declare-f3b0919453a6a370af34ee6f2e23dc8e0e251b42.zip |
make inference explicit
-rw-r--r-- | lib/Bread/Board/Declare/Meta/Role/Attribute.pm | 14 | ||||
-rw-r--r-- | lib/Bread/Board/Declare/Role/Object.pm | 1 | ||||
-rw-r--r-- | 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<Bread::Board::Manual::Concepts::Typemap> 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<Bread::Board::ConstructorInjection> 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, ); } |