The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Connector::Proxy
#
# Proxy class for attaching other CPAN modules
#
# Written by Scott Hardin and Martin Bartosch for the OpenXPKI project 2012
#
package Connector::Proxy;

use strict;
use warnings;
use English;
use Moose;
use Connector::Wrapper;

extends 'Connector';

has LOOPBACK => (
    is => 'ro',
    isa => 'Connector|Connector::Wrapper',
    reader => 'conn',
    required => 0,
);

around BUILDARGS => sub {
    
    my $orig = shift;
    my $class = shift;

    my $args = $_[0];

    if (  ref($args) eq 'HASH'
            && defined($args->{CONNECTOR})
            && defined($args->{TARGET}) ) {
        
            my %arg = %{$args};        
            $arg{'BASECONNECTOR'} = $arg{CONNECTOR};
            delete $arg{CONNECTOR};
                           
            $args->{LOOPBACK} = Connector::Wrapper->new( %arg );                
    }
    
    return $class->$orig(@_);
    
};
 
no Moose;
__PACKAGE__->meta->make_immutable;

1;
__END__

=head1 Name

Connector

=head1 Description

This is the base class for all Connector::Proxy implementations.

=head1 Developer Info

When creating the connector, all class attributes that have a corresponding config
item are initialised with the given values.

All configuration options, that are denoted on the same level as the connector 
definition are accessible inside the class using  C<$self->conn()->get()>.