Merged patched from andyg to throw useful errors during relationship loading
Matt S Trout [Fri, 9 Dec 2005 19:40:00 +0000 (19:40 +0000)]
Changes
lib/DBIx/Class/Relationship/Base.pm
lib/DBIx/Class/Relationship/BelongsTo.pm
lib/DBIx/Class/Relationship/HasMany.pm
lib/DBIx/Class/Relationship/HasOne.pm

diff --git a/Changes b/Changes
index 108399f..dc95be0 100644 (file)
--- a/Changes
+++ b/Changes
@@ -2,6 +2,7 @@ Revision history for DBIx::Class
 
 0.04001
         - Fix so set_inflated_column calls set_column
+        - Allow syntax errors in relationship classes to be reported.
 
 0.04 2005-11-26
         - Moved get_simple and set_simple into AccessorGroup
index b1ca7fb..4590985 100644 (file)
@@ -43,6 +43,9 @@ sub add_relationship {
   die "Can't create relationship without join condition" unless $cond;
   $attrs ||= {};
   eval "require $f_class;";
+  if ($@) {
+    $class->throw($@) unless $@ =~ /Can't locate/;
+  }
   my %rels = %{ $class->_relationships };
   $rels{$rel} = { class => $f_class,
                   cond  => $cond,
index aca69aa..7435d7b 100644 (file)
@@ -6,6 +6,10 @@ use warnings;
 sub belongs_to {
   my ($class, $rel, $f_class, $cond, $attrs) = @_;
   eval "require $f_class";
+  if ($@) {
+    $class->throw($@) unless $@ =~ /Can't locate/;
+  }
+
   my %f_primaries;
   $f_primaries{$_} = 1 for eval { $f_class->primary_columns };
   my $f_loaded = !$@;
index f30ff50..fdf5dd6 100644 (file)
@@ -7,6 +7,9 @@ sub has_many {
   my ($class, $rel, $f_class, $cond, $attrs) = @_;
     
   eval "require $f_class";
+  if ($@) {
+    $class->throw($@) unless $@ =~ /Can't locate/;
+  }
 
   unless (ref $cond) {
     my ($pri, $too_many) = $class->primary_columns;
index d114a39..432c10e 100644 (file)
@@ -14,6 +14,10 @@ sub has_one {
 sub _has_one {
   my ($class, $join_type, $rel, $f_class, $cond, $attrs) = @_;
   eval "require $f_class";
+  if ($@) {
+    $class->throw($@) unless $@ =~ /Can't locate/;
+  }
+
   unless (ref $cond) {
     my ($pri, $too_many) = $class->primary_columns;
     $class->throw( "might_have/has_one can only infer join for a single primary key; ${class} has more" )