Dan Horne wrote:
Yes - I often need user, pass and dsn strings for a DBI connection or a DBI::db
object. What would be the best pattern to deal with such cases if one were to
generalise it?
I often take care of this using type coercion:
package Object;
use Moose;
use Moose::Util::TypeConstraints;
class_type 'DBI::db';
coerce 'DBI::db'
=> from 'ArrayRef'
=> via { DBI->connect(@$_) }
coerce 'DBI::db'
=> from 'HashRef'
=> via { DBI->connect(@{$_}{qw/dsn username password/}) }
has 'dbh' => (
isa => 'DBI::db',
coerce => 1,
);
package main;
$object = Object->new(dbh => [qw/dbh:string username password]);
or
$object = Object->new(dbh => {dsn => ..., username => ..., password =>
...});
or
$object = Object->new(dbh => DBI->connect(...));
will all produce an $object with a dbh that is a DBI::db object