Bot-Backbone-Service-Ticket

 view release on metacpan or  search on metacpan

lib/Bot/Backbone/Service/Ticket/Tracker.pm  view on Meta::CPAN

package Bot::Backbone::Service::Ticket::Tracker;
$Bot::Backbone::Service::Ticket::Tracker::VERSION = '0.160490';
use v5.10;
use Moose::Role;

use String::Errf qw( errf );
use Try::Tiny;

# ABSTRACT: role implemented by ticket lookup whatsits


has title => (
    is          => 'ro',
    isa         => 'Str',
    required    => 1,
);


has link => (
    is          => 'ro',
    isa         => 'Str',
    predicate   => 'has_link',
);


has patterns => (
    is          => 'ro',
    isa         => 'ArrayRef[RegexpRef]',
    required    => 1,
);


requires 'lookup_issue';


sub titles_for_string {
    my ($self, $string) = @_;

    my @titles;
    for my $pattern (@{ $self->patterns }) {
        while ($string =~ /$pattern/g) {
            my $issue  = $+{issue};
            my $scheme = $+{scheme};
            my $title  = $self->issue_title($issue, !defined($scheme));
            push @titles, $title if defined $title;
        }
    }

    return @titles;
}


sub issue_title {
    my ($self, $number, $show_url) = @_;

    my $result;
    try {
        my $issue = $self->lookup_issue($number);
        $result = errf($self->title, $issue);

        $result .= $self->issue_link($issue)
            if $show_url and $self->has_link;
    }
    catch {
        warn "Ticket $number not found: " . $_;
    };



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