Bot-Backbone-Service-Ticket
view release on metacpan or search on metacpan
lib/Bot/Backbone/Service/Ticket.pm view on Meta::CPAN
package Bot::Backbone::Service::Ticket;
$Bot::Backbone::Service::Ticket::VERSION = '0.160490';
use Bot::Backbone::Service;
with qw(
Bot::Backbone::Service::Role::Service
Bot::Backbone::Service::Role::Responder
);
# ABSTRACT: a service for doing ticket lookups and summarizing
service_dispatcher as {
also not_command respond_by_method 'name_that_issue';
};
no Bot::Backbone::Service; # <-- remove my as
use Class::Load qw( load_first_existing_class );
use Moose::Util::TypeConstraints; # <-- bring in their as
use Scalar::Util qw( blessed );
use List::MoreUtils qw( all );
use Try::Tiny;
subtype 'Bot::Backbone::Service::Ticket::TrackerList'
=> as 'ArrayRef'
=> where { all { blessed($_) && $_->does('Bot::Backbone::Service::Ticket::Tracker') } @$_ };
coerce 'Bot::Backbone::Service::Ticket::TrackerList'
=> from 'ArrayRef[HashRef]',
=> via { [ map {
my $class = try {
load_first_existing_class
"Bot::Backbone::Service::Ticket::Tracker::$_->{type}",
"Bot::Backbone::Service::Ticket::Tracker::" . ucfirst $_->{type},
"Bot::Backbone::Service::Ticket::Tracker::" . uc $_->{type},
$_->{type};
}
catch {
if (/^Can't locate\b/) {
die "Unknown ticket tracker type $_->{type}. Is it installed?";
}
else {
die $_;
}
};
$class->new($_);
} @$_ ] };
no Moose::Util::TypeConstraints; # <-- remove their as
use Bot::Backbone::Service; # <-- bring in my as
has trackers => (
is => 'ro',
isa => 'Bot::Backbone::Service::Ticket::TrackerList',
required => 1,
coerce => 1,
traits => [ 'Array' ],
handles => {
'all_trackers' => 'elements',
},
);
sub name_that_issue {
my ($self, $message) = @_;
my @titles;
for my $tracker ($self->all_trackers) {
push @titles, grep { defined } $tracker->titles_for_string($message->text);
}
return @titles;
}
sub initialize { }
__PACKAGE__->meta->make_immutable;
__END__
( run in 1.295 second using v1.01-cache-2.11-cpan-39bf76dae61 )