Bread-Board
view release on metacpan or search on metacpan
lib/Bread/Board/Service/Inferred.pm view on Meta::CPAN
package Bread::Board::Service::Inferred;
our $AUTHORITY = 'cpan:STEVAN';
# ABSTRACT: Helper for inferring a service from a Moose object
$Bread::Board::Service::Inferred::VERSION = '0.37';
use Moose;
use Moose::Util::TypeConstraints 'find_type_constraint';
use Try::Tiny;
use Bread::Board::Types;
use Bread::Board::ConstructorInjection;
has 'current_container' => (
is => 'ro',
isa => 'Bread::Board::Container',
required => 1,
);
has 'service' => (
is => 'ro',
isa => 'Bread::Board::ConstructorInjection',
predicate => 'has_service',
);
has 'service_args' => (
is => 'ro',
isa => 'HashRef',
lazy => 1,
default => sub { +{} }
);
has 'infer_params' => (
is => 'ro',
isa => 'Bool',
default => sub { 0 },
);
sub infer_service {
my $self = shift;
my $type = shift;
my $seen = shift || {};
my $type_constraint = find_type_constraint( $type );
my $current_container = $self->current_container;
# the type must exist ...
(defined $type_constraint)
|| confess "$type is not an existing valid Moose type";
# the type must be either
# a class type, or a subtype
# of object.
($type_constraint->isa('Moose::Meta::TypeConstraint::Class')
||
$type_constraint->is_subtype_of('Object'))
|| confess 'Only class types, role types, or subtypes of Object can be inferred. '
. 'I don\'t know what to do with type (' . $type_constraint->name . ')';
my %params = (
name => 'type:' . $type,
);
if ($self->has_service) {
my $service = $self->service;
%params = (
%params,
name => $service->name,
class => $service->class,
dependencies => $service->dependencies,
parameters => $service->parameters,
( run in 0.604 second using v1.01-cache-2.11-cpan-39bf76dae61 )