BEGIN {
use FindBin;
use lib $FindBin::Bin . "/myapp/lib";
}
use Test::More;
SKIP: {
eval { require 'DBI.pm' && require 'DBD/SQLite.pm' };
$@ ?
plan skip_all => 'DBI or DBD::SQLite is not installed.' :
eval <<'CLASS';
package TestClass::ObjectKeyword;
use DBI;
use Validation::Class;
fld name => {
required => 1,
};
obj _build_dbh => {
type => 'DBI',
init => 'connect',
args => sub {
my ($self) = @_;
return ( join(':', 'dbi', 'SQLite', "dbname=". $self->name), "", "" )
}
};
has dbh => sub { shift->_build_dbh };
sub connect {
my ($self) = @_;
if ($self->validate('name')) {
if ($self->dbh) {
my $db = $self->dbh;
# ... do something else with DBI
return 1;
}
$self->set_errors($DBI::errstr);
}
return 0;
}
1;
CLASS
package main;
my $class = "TestClass::ObjectKeyword";
my $self = $class->new;
ok $class eq ref $self, "$class instantiated";
ok ! $self->connect, "class did not connect() as expected";
$self->name(':memory:');
ok $self->connect, "class DID connect() successfully as expected";
ok 'DBI::db' eq ref $self->dbh, "class has an instantiated DBI object";
ok 'DBI::db' eq ref $self->_build_dbh, "class can build a new DBI object";
# ...
}
done_testing;