X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FGeneric.pm;h=2fc043f6058f51ca81c446778c05508debd37f57;hb=c2849787d7804fcbe541c8063e240ceff0e5ff10;hp=8e0498b265bcb893bd1befaece4744cd494be9b4;hpb=89ecd854bc20494eaf22db9057969a69d4e199c8;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/lib/DBIx/Class/Schema/Loader/Generic.pm b/lib/DBIx/Class/Schema/Loader/Generic.pm index 8e0498b..2fc043f 100644 --- a/lib/DBIx/Class/Schema/Loader/Generic.pm +++ b/lib/DBIx/Class/Schema/Loader/Generic.pm @@ -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. + +=head2 resultset_components + +List of additional resultset components to be loaded into your table +classes. A good example would be C. Component +C will be automatically added to the above +C 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;