Database-Migrator
view release on metacpan or search on metacpan
lib/Test/Database/Migrator.pm view on Meta::CPAN
return;
}
sub _write_perl_sub_migration {
my $self = shift;
my $dir = $self->_migrations_dir->subdir('03-third');
$dir->mkpath;
my $file = $dir->file('migrate.pl'),
my $migration = <<'EOF';
use strict;
use warnings;
sub {
my ($migrator) = @_;
my $sql = 'CREATE TABLE myperlsub (id INTEGER)';
$migrator->dbh->do($sql);
return;
}
EOF
$self->_write_ddl_file(
$file,
$migration,
);
return;
}
# This program generates a warning and so causes a failure.
sub _write_perl_program_migration {
my $self = shift;
my $dir = $self->_migrations_dir->subdir('04-fourth');
$dir->mkpath;
my $file = $dir->file('migrate.pl'),
my $migration = <<'EOF';
#!/usr/bin/env perl
use strict;
use warnings;
sub main {
my $x;
print "hello $x\n";
return 1;
}
exit(main() ? 0 : 1);
EOF
$self->_write_ddl_file(
$file,
$migration,
);
chmod 0755, $file->stringify;
return;
}
sub _new_migrator {
my $self = shift;
return $self->class()->new(
database => $self->database(),
migration_table => 'applied_migration',
schema_file => $self->_schema_file(),
migrations_dir => $self->_migrations_dir(),
logger => _logger(),
);
}
sub _logger {
return Log::Dispatch->new(
outputs => [ [ 'TestDiag', min_level => 'info' ] ],
);
}
sub _build_migrations_dir {
my $self = shift;
my $dir = $self->_tempdir()->subdir('migrations');
## no critic (Lax::ProhibitLeadingZeros::ExceptChmod, ValuesAndExpressions::ProhibitLeadingZeros)
$dir->mkpath( 0, 0755 );
## use critic
return $dir;
}
sub _build_dbh {
my $self = shift;
return $self->_new_migrator()->dbh();
}
sub DEMOLISH {
my $self = shift;
if ( $ENV{DATABASE_MIGRATOR_TEST_WAIT} ) {
print "\n Waiting to clean up the test database\n\n"
or die $!;
## no critic (InputOutput::ProhibitExplicitStdin)
my $x = <STDIN>;
}
$self->_dbh()->disconnect() if $self->_has_dbh();
$self->_new_migrator()->_drop_database();
}
=for Pod::Coverage .*
=cut
__PACKAGE__->meta()->make_immutable();
( run in 1.439 second using v1.01-cache-2.11-cpan-140bd7fdf52 )