package Enbld::Command::List;
use strict;
use warnings;
use 5.010001;
use parent qw/Enbld::Command/;
use Encode;
require Enbld::Home;
require Enbld::App::Configuration;
sub do {
my $self = shift;
my $target_name = shift @{ $self->{argv} };
if ( $target_name ) {
$self->list_target_installed_version( $target_name );
} else {
$self->list_all_installed;
}
}
sub list_all_installed {
my $self = shift;
Enbld::Home->initialize;
Enbld::App::Configuration->read_file;
my $collection = Enbld::App::Configuration->config;
if ( ! keys %{ $collection } ) {
say "Nothing is installed yet.";
}
foreach my $name ( sort keys %{ $collection } ) {
my $config = Enbld::App::Configuration->search_config( $name );
my $line = $name . ' ' x 15;
print substr( $name . ' ' x 15 , 0, 15 );
my $version;
if ( $config->enabled ) {
$version = $config->enabled;
} else {
$version = 'Not enabled now...';
}
print substr( $version . ' ' x 20, 0, 20 );
if ( $config->enabled && $config->condition->annotation ) {
print encode( 'UTF-8', $config->condition->annotation );
}
print "\n";
}
return $self;
}
sub list_target_installed_version {
my $self = shift;
my $target_name = shift;
Enbld::Home->initialize;
Enbld::App::Configuration->read_file;
my $config = Enbld::App::Configuration->search_config( $target_name );
if ( ! $config ) {
require Enbld::Error;
Enbld::Error->throw( "Target '$target_name' is not installed yet.\n" );
}
for my $installed ( sort keys %{ $config->installed } ) {
print $installed . "\n";
}
return $self;
}
1;