# Always remember to do all digits for the version even if they're 0
# i.e. first release of 0.XX *must* be 0.XX000. This avoids fBSD ports
# brain damage and presumably various other packaging systems too
-our $VERSION = '0.02000';
+our $VERSION = '0.02007';
__PACKAGE__->mk_classaccessor('loader');
package My::Schema;
use base qw/DBIx::Class::Schema::Loader/;
+ sub _monikerize {
+ my $name = shift;
+ $name = join '', map ucfirst, split /[\W_]+/, lc $name;
+ $name;
+ }
+
__PACKAGE__->load_from_connection(
- dsn => "dbi:mysql:dbname",
- user => "root",
- password => "",
+ connect_info => [ "dbi:mysql:dbname",
+ "root",
+ "mypassword",
+ { AutoCommit => 1 },
+ ],
additional_classes => [qw/DBIx::Class::Foo/],
additional_base_classes => [qw/My::Stuff/],
left_base_classes => [qw/DBIx::Class::Bar/],
+ components => [qw/ResultSetManager/],
+ resultset_components => [qw/AlwaysRS/],
constraint => '^foo.*',
relationships => 1,
options => { AutoCommit => 1 },
- inflect => { child => 'children' },
+ inflect_map => { child => 'children' },
+ moniker_map => \&_monikerize,
debug => 1,
);
=cut
+# XXX this is DBI-specific, as it peers into the dsn to determine
+# the vendor class to use...
sub load_from_connection {
my ( $class, %args ) = @_;
- croak 'dsn argument is required' if ! $args{dsn};
- my $dsn = $args{dsn};
+ my $dsn;
+
+ if($args{connect_info} && $args{connect_info}->[0]) {
+ $dsn = $args{connect_info}->[0];
+ }
+ elsif($args{dsn}) {
+ warn "dsn argument is deprecated, please use connect_info instead";
+ $dsn = $args{dsn};
+ }
+ else {
+ croak 'connect_info arrayref argument with valid '
+ . 'first element is required';
+ }
+
my ($driver) = $dsn =~ m/^dbi:(\w*?)(?:\((.*?)\))?:/i;
$driver = 'SQLite' if $driver eq 'SQLite2';
my $impl = "DBIx::Class::Schema::Loader::" . $driver;