App-RoboBot

 view release on metacpan or  search on metacpan

lib/App/RoboBot/NetworkFactory.pm  view on Meta::CPAN

package App::RoboBot::NetworkFactory;
$App::RoboBot::NetworkFactory::VERSION = '4.004';
use v5.20;

use namespace::autoclean;

use Moose;

use Module::Loaded;

use App::RoboBot::Nick;
use App::RoboBot::Network::IRC;
use App::RoboBot::Network::Mattermost;
use App::RoboBot::Network::Slack;

has 'bot' => (
    is       => 'ro',
    isa      => 'App::RoboBot',
    required => 1,
);

has 'config' => (
    is       => 'ro',
    isa      => 'App::RoboBot::Config',
    required => 1,
);

has 'nick' => (
    is       => 'ro',
    isa      => 'App::RoboBot::Nick',
    required => 1,
);

has 'log' => (
    is        => 'rw',
    predicate => 'has_logger',
);

sub BUILD {
    my ($self) = @_;

    $self->log($self->bot->logger('core.network.factory')) unless $self->has_logger;
}

sub create {
    my ($self, $name, $net_cfg) = @_;

    $self->log->debug('Preparing to create new network object.');

    die $self->log->fatal('Network name not provided.') unless defined $name && $name =~ m{^[a-z0-9_-]+$}oi;
    die $self->log->fatal('Configuration invalid.') unless defined $net_cfg && ref($net_cfg) eq 'HASH';
    die $self->log->fatal('Missing network type.') unless exists $net_cfg->{'type'};

    # Check for network-specific nick (and create object for it if present) or
    # fall back to the NetworkFactory default nick.
    if (exists $net_cfg->{'nick'}) {
        $self->log->debug(sprintf('Network %s has a custom nick (%s). Overriding global nick for this network.', $name, $net_cfg->{'nick'}));

        $net_cfg->{'nick'} = App::RoboBot::Nick->new(
            config => $self->config,
            name   => $net_cfg->{'nick'},
        );
    } else {
        $net_cfg->{'nick'} = $self->nick;
    }



( run in 0.594 second using v1.01-cache-2.11-cpan-39bf76dae61 )