Fix for DBIx::Class 0.081
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / RelBuilder.pm
index 35a50a8..270630d 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 use Carp::Clan qw/^DBIx::Class/;
 use Lingua::EN::Inflect::Number ();
 
-our $VERSION = '0.03999_01';
+our $VERSION = '0.04005';
 
 =head1 NAME
 
@@ -24,9 +24,9 @@ is module is not (yet) for external use.
 
 =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.
@@ -155,21 +155,11 @@ sub generate_code {
             $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});
@@ -178,6 +168,18 @@ sub generate_code {
             $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) {
@@ -185,7 +187,7 @@ sub generate_code {
             delete $rev_cond{$_};
         }
 
-        push(@{$all_code->{$local_class}},
+        push(@{$all_code->{$local_class}{stmts}},
             { method => 'belongs_to',
               args => [ $remote_relname,
                         $remote_class,
@@ -193,8 +195,9 @@ sub generate_code {
               ],
             }
         );
+        $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,
@@ -202,6 +205,7 @@ sub generate_code {
               ],
             }
         );
+        $all_code->{$remote_class}{moniker} = $remote_moniker;
     }
 
     return $all_code;