Bot-Backbone
view release on metacpan or search on metacpan
lib/Bot/Backbone/DispatchSugar.pm view on Meta::CPAN
sub spoken($) {
my ($meta, $predicate) = @_;
my $dispatcher = $meta->building_dispatcher;
$dispatcher->add_predicate_or_return(
Bot::Backbone::Dispatcher::Predicate::Volume->new(
volume => 'spoken',
next_predicate => $predicate,
)
);
}
sub shouted($) {
my ($meta, $predicate) = @_;
my $dispatcher = $meta->building_dispatcher;
$dispatcher->add_predicate_or_return(
Bot::Backbone::Dispatcher::Predicate::Volume->new(
volume => 'shout',
next_predicate => $predicate,
)
);
}
sub whispered($) {
my ($meta, $predicate) = @_;
my $dispatcher = $meta->building_dispatcher;
$dispatcher->add_predicate_or_return(
Bot::Backbone::Dispatcher::Predicate::Volume->new(
volume => 'whisper',
next_predicate => $predicate,
)
);
}
our $WITH_ARGS;
sub given_parameters(&$) {
my ($meta, $arg_code, $predicate) = @_;
my $dispatcher = $meta->building_dispatcher;
my @args;
{
local $WITH_ARGS = \@args;
$arg_code->();
}
$dispatcher->add_predicate_or_return(
Bot::Backbone::Dispatcher::Predicate::GivenParameters->new(
parameters => \@args,
next_predicate => $predicate,
)
);
}
sub parameter($@) {
my ($name, %config) = @_;
push @$WITH_ARGS, [ $name, \%config ];
}
sub as(&) {
my $code = shift;
return $code;
}
sub _respond {
my ($meta, $code, $dispatcher_type) = @_;
my $dispatcher = $meta->building_dispatcher;
$dispatcher_type //= $meta;
$dispatcher->add_predicate_or_return(
Bot::Backbone::Dispatcher::Predicate::Respond->new(
dispatcher_type => $dispatcher_type,
the_code => $code,
)
);
}
sub respond(&) {
my ($meta, $code, $dispatcher_type) = @_;
_respond($meta, $code, $dispatcher_type);
}
sub _run_this {
my ($meta, $code, $dispatcher_type) = @_;
my $dispatcher = $meta->building_dispatcher;
$dispatcher_type //= $meta;
$dispatcher->add_predicate_or_return(
Bot::Backbone::Dispatcher::Predicate::Run->new(
dispatcher_type => $dispatcher_type,
the_code => $code,
)
);
}
sub run_this(&) {
my ($meta, $code, $dispatcher_type) = @_;
_run_this($meta, $code, $dispatcher_type);
}
sub _by_method {
my ($meta, $name) = @_;
Carp::croak("no such method as $name found on ", $meta->name)
unless defined $meta->find_method_by_name($name);
return sub {
my ($self, $message) = @_;
my $method = $self->can($name);
if (defined $method) {
return $self->$method($message);
}
else {
Carp::croak("no such method as $name found on ", $self->meta->name);
}
};
}
sub respond_by_method($) {
( run in 1.797 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )