The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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__

=head1 NAME

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

=head1 DESCRIPTION

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:

=over 4

=item 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.

=back

=head1 AUTHOR

John Napiorkowski C<< <jjnapiork@cpan.org> >>

=head1 CONTRIBUTORS

Tristan Pratt

=head1 COPYRIGHT & LICENSE

Copyright 2009, John Napiorkowski C<< <jjnapiork@cpan.org> >>

This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut