OPM-Installer

 view release on metacpan or  search on metacpan

lib/OPM/Installer/Utils/File.pm  view on Meta::CPAN

package OPM::Installer::Utils::File;

# ABSTRACT: File related utility functions

use v5.10;

use strict;
use warnings;

our $VERSION = '1.0.1'; # VERSION

use File::HomeDir;
use File::Spec;
use File::Temp;
use HTTP::Tiny;
use HTTP::Tiny::FileProtocol;
use IO::All;
use Moo;
use OPM::Installer::Logger;
use OPM::Installer::Utils::Config;
use OPM::Repository;
use Regexp::Common qw(URI);
use Types::Standard qw(ArrayRef Str Bool);

our $ALLOWED_SCHEME = [ 'HTTP', 'file' ];

has repositories      => ( is => 'ro', isa => ArrayRef[Str], default => \&_repository_list );
has package           => ( is => 'ro', isa => Str, required => 1 );
has framework_version => ( is => 'ro', isa => Str, required => 1 );
has version           => ( is => 'ro', isa => Str );
has verbose           => ( is => 'ro', isa => Bool );
has logger            => ( is => 'ro', default => sub{ OPM::Installer::Logger->new } );
has rc_config         => ( is => 'ro', lazy => 1, default => \&_rc_config );
has conf              => ( is => 'ro' );

sub list_available {
    my $self = shift;

   my @repositories = @{ $self->repositories || [] };

   for my $repo_url ( @repositories ) {
       $repo_url .= '/otrs.xml' if '.xml' ne substr $repo_url, -4;
   }

   my $repo = OPM::Repository->new(
       sources => \@repositories,
   );

   my $framework_version = $self->framework_version;
   $framework_version    =~ s{\.\d+$}{};

   return $repo->list(
       framework => $framework_version,
       details   => 1,
   );
}

sub resolve_path {
    my ($self) = @_;

    my $path;

    my $package = $self->package;
    if ( $self->_is_url( $package ) ) {
        # download file
        $path = $self->_download( $package );
    }
    elsif ( -f $package ) {
        # do nothing, file already exists
        $path = $package;
    }
    else {
        my @repositories = @{ $self->repositories || [] };

        for my $repo ( @repositories ) {
            $repo .= '/otrs.xml' if '.xml' ne substr $repo, -4;
        }

        say "Searching these repositories: @repositories" if $self->verbose;

        my $repo = OPM::Repository->new(
            sources => \@repositories,
        );

        my ($framework) = $self->framework_version =~ m{\A(\d+\.\d+)};

        my ($url) = $repo->find(



( run in 2.411 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )