use Carp::Clan qw/^DBIx::Class/;
use Lingua::EN::Inflect::Number ();
-our $VERSION = '0.03999_01';
+our $VERSION = '0.04006';
=head1 NAME
=head2 new
-Arguments: schema_class (scalar), inflect_plural, inflect_singular
+Arguments: schema inflect_plural, inflect_singular
-C<$schema_class> should be a schema class name, where the source
+C<$schema> should be a schema instance, where the source
classes have already been set up and registered. Column info, primary
key, and unique constraints will be drawn from this schema for all
of the existing source monikers.
$cond{$remote_cols->[$i]} = $local_cols->[$i];
}
- # If more than one rel between this pair of tables, use the
- # local col name(s) as the relname in the foreign source, instead
- # of the local table name.
my $local_relname;
- if($counters{$remote_moniker} > 1) {
- $local_relname = $self->_inflect_plural(
- lc($local_table) . q{_} . join(q{_}, @$local_cols)
- );
- } else {
- $local_relname = $self->_inflect_plural(lc $local_table);
- }
-
- # for single-column case, set the relname to the column name,
- # to make filter accessors work
my $remote_relname;
+
+ # for single-column case, set the remote relname to the column
+ # name, to make filter accessors work
if(scalar keys %cond == 1) {
my ($col) = keys %cond;
$remote_relname = $self->_inflect_singular($cond{$col});
$remote_relname = $self->_inflect_singular(lc $remote_table);
}
+ # If more than one rel between this pair of tables, use the local
+ # col names to distinguish
+ if($counters{$remote_moniker} > 1) {
+ my $colnames = q{_} . join(q{_}, @$local_cols);
+ $local_relname = $self->_inflect_plural(
+ lc($local_table) . $colnames
+ );
+ $remote_relname .= $colnames if keys %cond > 1;
+ } else {
+ $local_relname = $self->_inflect_plural(lc $local_table);
+ }
+
my %rev_cond = reverse %cond;
for (keys %rev_cond) {
delete $rev_cond{$_};
}
- push(@{$all_code->{$local_class}},
+ push(@{$all_code->{$local_class}{stmts}},
{ method => 'belongs_to',
args => [ $remote_relname,
$remote_class,
],
}
);
+ $all_code->{$local_class}{moniker} = $local_moniker;
- push(@{$all_code->{$remote_class}},
+ push(@{$all_code->{$remote_class}{stmts}},
{ method => 'has_many',
args => [ $local_relname,
$local_class,
],
}
);
+ $all_code->{$remote_class}{moniker} = $remote_moniker;
}
return $all_code;