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 )