#
#===============================================================================
#
# DESCRIPTION: Interface to send RFCs to Issues board
# uses plugins
# implemented Trello plugin via LIMS::Local::IssueTracker::Plugin::Trello
# future plugin ideas: GitLab?
#
#===============================================================================
package LIMS::Local::IssueTracker;
our $VERSION = "0.01";
use Modern::Perl;
use utf8;
use Carp;
use YAML::Tiny;
use FindBin qw($RealBin); # warn $RealBin;
use lib $RealBin . '../lib';
use LIMS::Local::Config;
use LIMS::Local::Utils;
use LIMS::Local::ScriptHelpers;
use Data::Printer;
use Moose;
use namespace::autoclean;
has 'config_file' => (
is => 'ro',
isa => 'Str',
default => 'issue_tracking',
);
has 'config' => (
is => 'ro',
isa => 'HashRef',
builder => '_build_config',
lazy => '1'
);
with 'MooseX::Object::Pluggable';
sub _build_config {
my ($self) = @_;
my $yaml;
# testing requires yaml files from any location
if ( -e $self->config_file ){ # overriding default config locations
$yaml = YAML::Tiny->read( $self->config_file )->[0];
}
else {
my $config = LIMS::Local::Config->instance;
my $tools = LIMS::Local::ScriptHelpers->new;
my ($top_level_hilis) = $RealBin =~ /^(.*apps\/HILIS4)/;
$tools->use_path($top_level_hilis);
$yaml = $tools->get_yaml_file( $self->config_file );
}
# dont use the live Trello board while testing
if ( not $ENV{DEBUG_GITLAB_LIVE} && ($ENV{HARNESS_ACTIVE} || $ENV{TESTRUN} )) {
$yaml->{board} = $yaml->{board}->{test};
}
else {
$yaml->{board} = $yaml->{board}->{live};
}
return $yaml;
}
sub BUILD {
my $self = shift;
$self->load_plugin( $self->config->{plugin} ); # config needs to load first
croak "not trackable" unless $self->does("LIMS::Local::Role::Trackable");
$self->check_config()
or croak $self->config->{plugin} . " config error: " . $!;
}
__PACKAGE__->meta->make_immutable;
1;