better CamelCASE support for naming=v8
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / RelBuilder.pm
index 9b75e80..0f4005e 100644 (file)
@@ -268,6 +268,14 @@ sub _relationship_attrs {
     return \%composite;
 }
 
+sub _strip_id_postfix {
+    my ($self, $name) = @_;
+
+    $name =~ s/_?(?:id|ref|cd|code|num)\z//i;
+
+    return $name;
+}
+
 sub _array_eq {
     my ($self, $a, $b) = @_;
 
@@ -296,7 +304,9 @@ sub _remote_attrs {
 sub _sanitize_name {
     my ($self, $name) = @_;
 
-    $name =~ s/\W+/_/g;
+    $name = $self->loader->_to_identifier('relationships', $name, '_');
+
+    $name =~ s/\W+/_/g; # if naming >= 8 to_identifier takes care of it
 
     return $name;
 }
@@ -306,7 +316,7 @@ sub _normalize_name {
 
     $name = $self->_sanitize_name($name);
 
-    my @words = split_name $name;
+    my @words = split_name $name, $self->loader->_get_naming_v('relationships');
 
     return join '_', map lc, @words;
 }
@@ -319,8 +329,7 @@ sub _remote_relname {
     # name, to make filter accessors work, but strip trailing _id
     if(scalar keys %{$cond} == 1) {
         my ($col) = values %{$cond};
-        $col = $self->_normalize_name($col);
-        $col =~ s/_id$//;
+        $col = $self->_strip_id_postfix($self->_normalize_name($col));
         ($remote_relname) = $self->_inflect_singular($col);
     }
     else {
@@ -715,8 +724,7 @@ sub _relnames_and_method {
             my $colnames = q{_} . $self->_normalize_name(join '_', @$local_cols);
             $remote_relname .= $colnames if keys %$cond > 1;
 
-            $local_relname = $self->_normalize_name($local_table . $colnames);
-            $local_relname =~ s/_id$//;
+            $local_relname = $self->_strip_id_postfix($self->_normalize_name($local_table . $colnames));
 
             $local_relname_uninflected = $local_relname;
             ($local_relname) = $self->_inflect_plural($local_relname);