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 )