App-Sqitch
view release on metacpan or search on metacpan
lib/App/Sqitch/Command/engine.pm view on Meta::CPAN
package App::Sqitch::Command::engine;
use 5.010;
use strict;
use warnings;
use utf8;
use Moo;
use Types::Standard qw(Str Int HashRef);
use Locale::TextDomain qw(App-Sqitch);
use App::Sqitch::X qw(hurl);
use Try::Tiny;
use URI::db;
use Path::Class qw(file dir);
use List::Util qw(max first);
use namespace::autoclean;
use constant extra_target_keys => qw(target);
extends 'App::Sqitch::Command';
with 'App::Sqitch::Role::TargetConfigCommand';
our $VERSION = 'v1.6.1'; # VERSION
sub _chk_engine($) {
my $engine = shift;
hurl engine => __x(
'Unknown engine "{engine}"', engine => $engine
) unless first { $engine eq $_ } App::Sqitch::Command::ENGINES;
}
sub configure {
# No config; engine config is actually engines.
return {};
}
sub execute {
my ( $self, $action ) = (shift, shift);
$action ||= 'list';
$action =~ s/-/_/g;
my $meth = $self->can($action) or $self->usage(__x(
'Unknown action "{action}"',
action => $action,
));
return $self->$meth(@_);
}
sub list {
my $self = shift;
my $sqitch = $self->sqitch;
my $rx = join '|' => App::Sqitch::Command::ENGINES;
my %engines = $sqitch->config->get_regexp(key => qr/^engine[.](?:$rx)[.]target$/);
# Make it verbose if --verbose was passed at all.
my $format = $sqitch->options->{verbosity} ? "%1\$s\t%2\$s" : '%1$s';
for my $key (sort keys %engines) {
my ($engine) = $key =~ /engine[.]([^.]+)/;
$sqitch->emit(sprintf $format, $engine, $engines{$key})
}
return $self;
}
sub _target {
my ($self, $engine, $name) = @_;
my $target = $self->properties->{target} || $name || return;
if ($target =~ /:/) {
# It's URI. Return it if it uses the proper engine.
my $uri = URI::db->new($target, 'db:');
hurl engine => __x(
'Cannot assign URI using engine "{new}" to engine "{old}"',
( run in 0.832 second using v1.01-cache-2.11-cpan-f56aa216473 )