summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-05-25 13:57:45 -0500
committerJesse Luehrs <doy@tozt.net>2011-05-25 14:02:09 -0500
commitf3b0919453a6a370af34ee6f2e23dc8e0e251b42 (patch)
tree5a1a4227ac0a3d96ade44750a3ed8e3e3401cff6
parentbbb409dcc33fe109968c6330b555fa72ab3f8e31 (diff)
downloadbread-board-declare-f3b0919453a6a370af34ee6f2e23dc8e0e251b42.tar.gz
bread-board-declare-f3b0919453a6a370af34ee6f2e23dc8e0e251b42.zip
make inference explicit
-rw-r--r--lib/Bread/Board/Declare/Meta/Role/Attribute.pm14
-rw-r--r--lib/Bread/Board/Declare/Role/Object.pm1
-rw-r--r--t/50-infer.t22
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,
);
}