GCloud-CLIWrapper
view release on metacpan or search on metacpan
lib/GCloud/CLIWrapper.pm view on Meta::CPAN
package GCloud::CLIWrapper;
use Moose;
use JSON::MaybeXS;
use IPC::Open3;
use GCloud::CLIWrapper::Result;
our $VERSION = '0.01';
has gcloud => (is => 'ro', isa => 'Str', default => 'gcloud');
has gcloud_options => (is => 'ro', isa => 'ArrayRef[Str]', lazy => 1, default => sub { [ ] });
sub command_for {
my ($self, @params) = @_;
return ($self->gcloud, @{ $self->gcloud_options }, @params);
}
sub run {
my ($self, @command) = @_;
return $self->input(undef, @command);
}
sub json {
my ($self, @command) = @_;
my $result = $self->run(@command);
my $struct = eval {
JSON->new->decode($result->output);
};
if ($@) {
return GCloud::CLIWrapper::Result->new(
rc => $result->rc,
output => $result->output,
success => 0
);
}
return GCloud::CLIWrapper::Result->new(
rc => $result->rc,
output => $result->output,
json => $struct
);
}
sub input {
my ($self, $input, @params) = @_;
my @final_command = $self->command_for(@params);
my ($stdin, $stdout, $stderr);
my $pid = open3($stdin, $stdout, $stderr, @final_command);
print $stdin $input if(defined $input);
close $stdin;
my $out = join '', <$stdout>;
my $err = join '', <$stderr> if ($stderr);
die "Unexpected contents in stderr:\n $err" if ($err);
waitpid( $pid, 0 );
my $rc = $? >> 8;
return GCloud::CLIWrapper::Result->new(
rc => $rc,
output => $out,
);
}
1;
### main pod documentation begin ###
( run in 0.785 second using v1.01-cache-2.11-cpan-39bf76dae61 )