OPM-Installer
view release on metacpan or search on metacpan
lib/OPM/Installer.pm view on Meta::CPAN
package OPM::Installer;
# ABSTRACT: Install ticketsystem (Znuny/OTOBO) add ons
use v5.24;
use strict;
use warnings;
our $VERSION = '1.0.1'; # VERSION
use Moo;
use Capture::Tiny qw(:all);
use IO::All;
use Module::Runtime qw(use_module is_module_name);
use Types::Standard qw(ArrayRef Str Bool);
use OPM::Parser;
use OPM::Installer::Utils::TS;
use OPM::Installer::Utils::File;
use OPM::Installer::Logger;
has package => ( is => 'ro', isa => Str );
has version => ( is => 'ro', isa => Str, lazy => 1, default => \&_build_version );
has prove => ( is => 'ro', default => sub { 0 } );
has manager => ( is => 'ro', lazy => 1, default => \&_build_manager );
has repositories => ( is => 'ro', isa => ArrayRef[Str] );
has conf => ( is => 'ro' );
has force => ( is => 'ro', isa => Bool );
has sudo => ( is => 'ro', isa => Bool );
has utils_ts => ( is => 'ro', lazy => 1, default => sub{ OPM::Installer::Utils::TS->new } );
has verbose => ( is => 'ro', isa => Bool, default => sub { 0 } );
has logger => ( is => 'ro', lazy => 1, default => sub { OPM::Installer::Logger->new } );
sub list_available {
my ( $self, %params ) = @_;
my %file_opts;
if ( $params{repositories} and ref $params{repositories} eq 'ARRAY' ) {
$file_opts{repositories} = $params{repositories};
}
my $package_utils = OPM::Installer::Utils::File->new(
%file_opts,
package => 'DummyPackage', # ::File needs a package set
version => $self->version,
);
return $package_utils->list_available;
}
sub install {
my $self = shift;
if ( @_ % 2 ) {
unshift @_, 'package';
}
my %params = @_;
my %file_opts;
if ( $self->repositories ) {
$file_opts{repositories} = $self->repositories;
}
if ( $params{repositories} and ref $params{repositories} eq 'ARRAY' ) {
$file_opts{repositories} = $params{repositories};
}
my $version_string = "";
if ( $params{version} and $params{version_exact} ) {
$file_opts{version} = $params{version};
$version_string = $params{version};
}
say sprintf "Try to install %s %s...", $params{package} || $self->package, $version_string if $self->verbose;
my $installed_version = $self->utils_ts->is_installed( package => $params{package} || $self->package );
if ( $installed_version ) {
my $message = sprintf 'Addon %s is installed (%s)',
$params{package} || $self->package, $installed_version;
$self->logger->debug( message => $message );
say $message;
if ( $params{version} ) {
my $check = $self->utils_ts->_check_version(
( run in 2.192 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )