From 2a5b6f7d3dc3a2afdf5efb254720bd1b1fafcc4a Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 16 Apr 2011 09:54:50 -0500 Subject: allow explicitly not creating a type mapping for certain services --- lib/Bread/Board/Declare/Meta/Role/Attribute.pm | 12 ++++++++++++ lib/Bread/Board/Declare/Role/Object.pm | 3 ++- lib/Bread/Board/Declare/Role/Service.pm | 11 +++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) (limited to 'lib') 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; -- cgit v1.2.3