Added missing space in error message
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader.pm
index 8d83679..aa62e41 100644 (file)
@@ -10,7 +10,7 @@ use UNIVERSAL::require;
 # 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.01003';
+our $VERSION = '0.02007';
 
 __PACKAGE__->mk_classaccessor('loader');
 
@@ -23,17 +23,28 @@ DBIx::Class::Schema::Loader - Dynamic definition of a DBIx::Class::Schema
   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,
   );
 
@@ -59,17 +70,10 @@ DBIx::Class::Schema::Loader - Dynamic definition of a DBIx::Class::Schema
   my $classes = $schema1->loader->classes;
 
   # Use the schema as per normal for DBIx::Class::Schema
-  my $rs = $schema1->resultset($monikers->{table_table})->search(...);
+  my $rs = $schema1->resultset($monikers->{foo_table})->search(...);
 
 =head1 DESCRIPTION
 
-THIS IS A DEVELOPMENT RELEASE.  This is 0.01xxx, the first public
-releases.  Expect things to be broken in various ways.  Expect the
-entire design to be fatally flawed.  Expect the interfaces to change if
-it becomes neccessary.  It's mostly here for people to poke at it and
-find the flaws in it.  0.02 will hopefully have some sanity when we get
-there.
-
 DBIx::Class::Schema::Loader automates the definition of a
 DBIx::Class::Schema by scanning table schemas and setting up
 columns and primary keys.
@@ -82,6 +86,22 @@ db-specific subclass for an unsupported db.
 This module requires L<DBIx::Class> 0.05 or later, and obsoletes
 L<DBIx::Class::Loader> for L<DBIx::Class> version 0.05 and later.
 
+While on the whole, the bare table definitions are fairly straightforward,
+relationship creation is somewhat heuristic, especially in the choosing
+of relationship types, join types, and relationship names.  The relationships
+generated by this module will probably never be as well-defined as
+hand-generated ones.  Because of this, over time a complex project will
+probably wish to migrate off of L<DBIx::Class::Schema::Loader>.
+
+It is designed more to get you up and running quickly against an existing
+database, or to be effective for simple situations, rather than to be what
+you use in the long term for a complex database/project.
+
+That being said, transitioning your code from a Schema generated by this
+module to one that doesn't use this module should be straightforward and
+painless, so don't shy away from it just for fears of the transition down
+the road.
+
 =head1 METHODS
 
 =head2 load_from_connection
@@ -92,11 +112,25 @@ L<DBIx::Class::Schema::Loader::Generic> documentation.
 
 =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;
@@ -119,6 +153,14 @@ that was used during construction.  See the
 L<DBIx::Class::Schema::Loader::Generic> docs for more information
 on the available loader methods there.
 
+=head1 KNOWN BUGS
+
+Aside from relationship definitions being less than ideal in general,
+this version is known not to handle the case of multiple relationships
+between the same pair of tables.  All of the relationship code will
+be overhauled on the way to 0.03, at which time that bug will be
+addressed.
+
 =head1 AUTHOR
 
 Brandon Black, C<blblack@gmail.com>