Test-Database
view release on metacpan or search on metacpan
lib/Test/Database/Driver.pm view on Meta::CPAN
package Test::Database::Driver;
$Test::Database::Driver::VERSION = '1.113';
use strict;
use warnings;
use Carp;
use File::Spec;
use File::Path;
use version;
use YAML::Tiny qw( LoadFile DumpFile );
use Cwd;
use Test::Database::Handle;
#
# GLOBAL CONFIGURATION
#
# the location where all drivers-related files will be stored
my $KEY = '';
my $login = getlogin() || getpwuid($<);
$login =~ s/\W+//g;
my $root = File::Spec->rel2abs(
File::Spec->catdir( File::Spec->tmpdir(), "Test-Database-$login" ) );
# generic driver class initialisation
sub __init {
my ($class) = @_;
# create directory if needed
my $dir = $class->base_dir();
if ( !-e $dir ) {
mkpath( [$dir] );
}
elsif ( !-d $dir ) {
croak "$dir is not a directory. Initializing $class failed";
}
# load the DBI driver (may die)
DBI->install_driver( $class->name() );
}
#
# METHODS
#
sub new {
my ( $class, %args ) = @_;
if ( $class eq __PACKAGE__ ) {
if ( exists $args{driver_dsn} ) {
my ( $scheme, $driver, $attr_string, $attr_hash, $driver_dsn )
= DBI->parse_dsn( $args{driver_dsn} );
$args{dbd} = $driver;
}
croak "dbd or driver_dsn parameter required" if !exists $args{dbd};
eval "require Test::Database::Driver::$args{dbd}"
or do { $@ =~ s/ at .*?\z//s; croak $@; };
$class = "Test::Database::Driver::$args{dbd}";
$class->__init();
}
my $self = bless {
%args,
dbd => $class->name() || $args{dbd},
},
$class;
$self->_load_mapping();
# try to connect before returning the object
if ( !$class->is_filebased() ) {
eval {
DBI->connect_cached( $self->connection_info(),
{ PrintError => 0 } );
} or return;
}
return $self;
}
sub _mapping_file {
( run in 1.119 second using v1.01-cache-2.11-cpan-39bf76dae61 )