Bot-Backbone

 view release on metacpan or  search on metacpan

lib/Bot/Backbone/Service/Role/Dispatch.pm  view on Meta::CPAN

package Bot::Backbone::Service::Role::Dispatch;
$Bot::Backbone::Service::Role::Dispatch::VERSION = '0.161950';
use v5.10;
use Moose::Role;

with 'Bot::Backbone::Service::Role::SendPolicy';

use namespace::autoclean;

# ABSTRACT: Role for services that can perform dispatch


has dispatcher_name => (
    is          => 'rw',
    isa         => 'Str',
    init_arg    => 'dispatcher',
    predicate   => 'has_dispatcher',
);


has dispatcher => (
    is          => 'rw',
    isa         => 'Bot::Backbone::Dispatcher',
    init_arg    => undef,
    lazy_build  => 1,
    predicate   => 'has_setup_the_dispatcher', 
);

sub _build_dispatcher {
    my $self = shift;

    # If a named dispatcher is given use that
    if ($self->has_dispatcher) {
        return $self->bot->meta->dispatchers->{ $self->dispatcher_name };
    }

    # If we have a dispatch builder
    elsif ($self->meta->has_dispatch_builder) {
        $self->dispatcher_name('<service_dispatcher>');
        return $self->meta->run_dispatch_builder;
    }

    # Use an empty dispatcher
    else {
        $self->dispatcher_name('<empty>');
        return Bot::Backbone::Dispatcher->new;
    }
}


has commands => (
    is          => 'ro',
    isa         => 'HashRef[Str]',
    predicate   => 'has_custom_commands',
    traits      => [ 'Hash' ],
    handles     => {
        command_map => 'elements',
    },
);


sub _apply_command_rewrite {
    my $self = shift;
    my %commands = reverse $self->command_map;

    my $iterator = $self->dispatcher->predicate_iterator;
    while (my $predicate = $iterator->next_predicate) {
        if ($predicate->isa('Bot::Backbone::Dispatcher::Predicate::Command')) {



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