| Bread-Board documentation | Contained in the Bread-Board distribution. |
Bread::Board::Container::Parameterized - A parameterized container
All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT.
Stevan Little <stevan.little@iinteractive.com>
Copyright 2010-2011 Infinity Interactive, Inc.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Bread-Board documentation | Contained in the Bread-Board distribution. |
package Bread::Board::Container::Parameterized; use Moose; use Bread::Board::Container; our $VERSION = '0.20'; our $AUTHORITY = 'cpan:STEVAN'; with 'Bread::Board::Traversable'; has 'name' => ( is => 'rw', isa => 'Str', required => 1 ); has 'allowed_parameter_names' => ( is => 'ro', isa => 'ArrayRef', required => 1, ); has 'container' => ( is => 'ro', isa => 'Bread::Board::Container', lazy => 1, default => sub { my $self = shift; Bread::Board::Container->new( name => $self->name ) }, handles => [qw[ add_service get_service has_service get_service_list has_services add_sub_container get_sub_container has_sub_container get_sub_container_list has_sub_containers ]] ); sub fetch { die "Cannot fetch from a parameterized container"; } sub resolve { die "Cannot resolve from a parameterized container"; } sub create { my ($self, %params) = @_; my @allowed_names = sort @{ $self->allowed_parameter_names }; my @given_names = sort keys %params; (scalar @allowed_names == scalar @given_names) || confess "You did not pass the correct number of parameters"; ((join "" => @allowed_names) eq (join "" => @given_names)) || confess "Incorrect parameter list, got: (" . (join "" => @given_names) . ") expected: (" . (join "" => @allowed_names) . ")"; my $clone = $self->container->clone( name => join "|" => $self->name, @given_names ); foreach my $key ( @given_names ) { $clone->add_sub_container( $params{ $key }->clone( name => $key ) ); } $clone; } __PACKAGE__->meta->make_immutable; no Moose; 1; __END__