Test::DBIx::Class::SchemaManager::Trait::SQLite - The Default Role


Test-DBIx-Class documentation Contained in the Test-DBIx-Class distribution.

Index


Code Index:

NAME

Top

Test::DBIx::Class::SchemaManager::Trait::SQLite - The Default Role

DESCRIPTION

Top

The default Storage trait which provides the ability to deploy to a SQLite database. It also sets some %ENV and or configuration options that you can use to specify alternative database setup.

In addition to the documented %ENV settings, this Trait adds the following:

DBNAME

Defaults to ':memory:' to create an in memory database. Provide a string suitable for the "dbname=XXX" part of your connect string. Typically this should be the path to a location on the filesystem you want the datbase file to be stored.

Please note that this file will automatically be deleted unless you have specified to 'keep_db' in the config or via the $ENV{KEEP_DB} setting.

Also note that if you specify a path that already exists, we will automatically add the option 'force_drop_table', on the assumption you are roundtripping tests to the same database file. This way you can avoid having to specifically tell the system to delete the file each time.

AUTHOR

Top

John Napiorkowski <jjnapiork@cpan.org>

CONTRIBUTORS

Top

Tristan Pratt

COPYRIGHT & LICENSE

Top


Test-DBIx-Class documentation Contained in the Test-DBIx-Class distribution.

package Test::DBIx::Class::SchemaManager::Trait::SQLite; {
	
	use Moose::Role;
	use MooseX::Attribute::ENV;
	use Test::DBIx::Class::Types qw(ConnectInfo);

	sub dbname {
		my ($self) = @_;

		my $env_path = $ENV{DBNAME};
		my $dsn      = $self->{connect_info}{dsn};  

		if($env_path) {
			return $env_path;
		}
		elsif($dsn) {
			my ($dbname) = $dsn =~ m/dbi:[^:]+:dbname=(.+)/i;
			if($dbname) {
				return $dbname;
			}
			else {
				croak("Couldn't find dbname in sqlite dsn '$dsn'");
			}
		}
		else {
			return ':memory:';
		}
	}

	sub get_default_connect_info {
		my ($self) = @_;
		return ["dbi:SQLite:dbname=".$self->dbname,'',''];
	}

	before 'setup' => sub {
		my ($self) = @_;
		if(my $path = $ENV{DBNAME}) {
			if(-e $path) {
				$self->builder->ok(-w $path, "Path $path is accessible, forcing 'force_drop_table'");
				$self->force_drop_table(1);
			}
		}
	};

	after 'cleanup' => sub {
		my ($self) = @_;
		if(!$self->keep_db && lc $self->dbname ne ':memory:') {
			unlink $self->dbname;
		}
	};
} 1;

__END__