tests cleaned a little, added autoloading of on-disk class defs, added currently...
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / Generic.pm
index 8e0498b..2fc043f 100644 (file)
@@ -22,6 +22,8 @@ __PACKAGE__->mk_ro_accessors(qw/
                                 additional_classes
                                 additional_base_classes
                                 left_base_classes
+                               components
+                               resultset_components
                                 relationships
                                 inflect
                                 db_schema
@@ -61,6 +63,18 @@ List of additional base classes, that need to be leftmost.
 
 List of additional classes which your table classes will use.
 
+=head2 components
+
+List of additional components to be loaded into your table classes.
+A good example would be C<ResultSetManager>.
+
+=head2 resultset_components
+
+List of additional resultset components to be loaded into your table
+classes.  A good example would be C<AlwaysRS>.  Component
+C<ResultSetManager> will be automatically added to the above
+C<components> list if this option is set.
+
 =head2 constraint
 
 Only load tables matching regex.
@@ -129,7 +143,12 @@ sub new {
     $self->{inflect}    ||= {};
     $self->_ensure_arrayref(qw/additional_classes
                                additional_base_classes
-                               left_base_classes/);
+                               left_base_classes
+                              components
+                              resultset_components/);
+
+    push(@{$self->{components}}, 'ResultSetManager')
+        if @{$self->{resultset_components}};
 
     $self->{monikers} = {};
     $self->{classes} = {};
@@ -224,8 +243,8 @@ sub _make_cond_rel {
     my $rev_cond = { reverse %$cond };
 
     for (keys %$rev_cond) {
-       $rev_cond->{"foreign.$_"} = "self.".$rev_cond->{$_};
-       delete $rev_cond->{$_};
+        $rev_cond->{"foreign.$_"} = "self.".$rev_cond->{$_};
+        delete $rev_cond->{$_};
     }
 
     my $cond_printable = _stringify_hash($cond)
@@ -303,6 +322,9 @@ sub _load_classes {
         $self->_inject($table_class, @{$self->additional_base_classes});
         $self->_use   ($table_class, @{$self->additional_classes});
         $self->_inject($table_class, @{$self->left_base_classes});
+       $table_class->load_components(@{$self->components});
+       $table_class->load_resultset_components(@{$self->resultset_components})
+           if @{$self->resultset_components};
 
         warn qq/\# Initializing table "$tablename" as "$table_class"\n/
             if $self->debug;
@@ -320,6 +342,15 @@ sub _load_classes {
         warn qq/$table_class->set_primary_key('$primaries')\n/
             if $self->debug && @$pks;
 
+        $table_class->require;
+        if($@ && $@ !~ /^Can't locate /) {
+            croak "Failed to load external class definition"
+                  . "for '$table_class': $@";
+        }
+
+        warn qq/# Loaded external class definition for '$table_class'\n/
+            if $self->debug;
+
         $schema->register_class($table_moniker, $table_class);
         $self->classes->{$lc_tblname} = $table_class;
         $self->monikers->{$lc_tblname} = $table_moniker;