Many-to-many relationships now warn if the utility methods would clash
Ash Berlin [Wed, 3 Oct 2007 20:00:32 +0000 (20:00 +0000)]
Changes
lib/DBIx/Class/Relationship/ManyToMany.pm

diff --git a/Changes b/Changes
index 85e824d..649e5e8 100644 (file)
--- a/Changes
+++ b/Changes
@@ -4,6 +4,8 @@ Revision history for DBIx::Class
           foreign and self parts the wrong way round in the condition
         - ResultSetColumn::func() now returns all results if called in list
           context; this makes things like func('DISTINCT') work as expected
+        - Many-to-many relationships now warn if the utility methods would 
+          clash
 
 0.08007 2007-09-04 19:36:00
         - patch for Oracle datetime inflation (abram@arin.net)
index 1e6b93b..451e435 100644 (file)
@@ -24,6 +24,13 @@ sub many_to_many {
     my $set_meth = "set_${meth}";
     my $rs_meth = "${meth}_rs";
 
+    for ($add_meth, $remove_meth, $set_meth, $rs_meth) {
+      warn "***************************************************************************\n".
+           "The many-to-many relationship $meth is trying to create a utility method called $_. This will overwrite the existing method on $class. You almost certainly want to rename your method or the many-to-many relationship, as your method will not be callable (it will use the one from the relationship instead.) YOU HAVE BEEN WARNED\n".
+           "***************************************************************************\n"
+        if $class->can($_);
+    }
+
     $rel_attrs->{alias} ||= $f_rel;
 
     *{"${class}::${meth}_rs"} = sub {