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 )