summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-04-16 09:54:50 -0500
committerJesse Luehrs <doy@tozt.net>2011-04-16 09:54:50 -0500
commit2a5b6f7d3dc3a2afdf5efb254720bd1b1fafcc4a (patch)
tree99b2bb3b96e7ba6b77317359b32de7522b615c28 /lib
parent4e893b484f3b307995dae8ba66163cadb44a8a18 (diff)
downloadbread-board-declare-2a5b6f7d3dc3a2afdf5efb254720bd1b1fafcc4a.tar.gz
bread-board-declare-2a5b6f7d3dc3a2afdf5efb254720bd1b1fafcc4a.zip
allow explicitly not creating a type mapping for certain services
Diffstat (limited to 'lib')
-rw-r--r--lib/Bread/Board/Declare/Meta/Role/Attribute.pm12
-rw-r--r--lib/Bread/Board/Declare/Role/Object.pm3
-rw-r--r--lib/Bread/Board/Declare/Role/Service.pm11
3 files changed, 25 insertions, 1 deletions
diff --git a/lib/Bread/Board/Declare/Meta/Role/Attribute.pm b/lib/Bread/Board/Declare/Meta/Role/Attribute.pm
index f6584ae..83eeeaa 100644
--- a/lib/Bread/Board/Declare/Meta/Role/Attribute.pm
+++ b/lib/Bread/Board/Declare/Meta/Role/Attribute.pm
@@ -108,6 +108,18 @@ has associated_service => (
predicate => 'has_associated_service',
);
+=attr typemap
+
+Whether or not to create a type mapping for this service. Defaults to true.
+
+=cut
+
+has typemap => (
+ is => 'rw',
+ isa => 'Bool',
+ default => 1,
+);
+
after attach_to_class => sub {
my $self = shift;
diff --git a/lib/Bread/Board/Declare/Role/Object.pm b/lib/Bread/Board/Declare/Role/Object.pm
index 7a5a71c..6ea4d91 100644
--- a/lib/Bread/Board/Declare/Role/Object.pm
+++ b/lib/Bread/Board/Declare/Role/Object.pm
@@ -35,7 +35,8 @@ after BUILD => sub {
)->infer_service($service->class);
$self->add_service($inferred);
- $self->add_type_mapping_for($service->class, $inferred);
+ $self->add_type_mapping_for($service->class, $inferred)
+ if $service->should_create_typemap;
$self->add_service(
Bread::Board::Service::Alias->new(
diff --git a/lib/Bread/Board/Declare/Role/Service.pm b/lib/Bread/Board/Declare/Role/Service.pm
index 96bdaf7..d1972db 100644
--- a/lib/Bread/Board/Declare/Role/Service.pm
+++ b/lib/Bread/Board/Declare/Role/Service.pm
@@ -24,6 +24,17 @@ has associated_attribute => (
weak_ref => 1,
);
+=method should_create_typemap
+
+Whether this service will create a type mapping, when it is added to a
+container.
+
+=cut
+
+sub should_create_typemap {
+ return shift->associated_attribute->typemap;
+}
+
around get => sub {
my $orig = shift;
my $self = shift;