proxy result_class, and fix load_namespace to use it correctly
Brandon L. Black [Thu, 27 Jul 2006 06:08:10 +0000 (06:08 +0000)]
lib/DBIx/Class/ResultSourceProxy.pm
lib/DBIx/Class/Schema.pm

index 591927f..4c52fa0 100644 (file)
@@ -8,6 +8,7 @@ use base qw/DBIx::Class/;
 
 sub iterator_class  { shift->result_source_instance->resultset_class(@_) }
 sub resultset_class { shift->result_source_instance->resultset_class(@_) }
+sub result_class { shift->result_source_instance->result_class(@_) }
 sub source_name { shift->result_source_instance->source_name(@_) }
 
 sub resultset_attributes {
index 63d0ca4..0ec1897 100644 (file)
@@ -393,6 +393,19 @@ sub load_namespaces {
            . "that you had already set '$source' to use '$rs_set' instead";
       }
 
+      my $r_class = delete $results{$source};
+      if($r_class) {
+        my $r_set = $source_class->result_class;
+        if(!$r_set || $r_set eq $sources{$source}) {
+          $class->ensure_class_loaded($r_class);
+          $source_class->result_class($r_class);
+        }
+        else {
+          warn "We found Result class '$r_class' for '$source', but it seems "
+             . "that you had already set '$source' to use '$r_set' instead";
+        }
+      }
+
       push(@to_register, [ $source_class->source_name, $source_class ]);
     }
   }
@@ -402,29 +415,14 @@ sub load_namespaces {
       . 'corresponding ResultSource';
   }
 
-  Class::C3->reinitialize;
-  $class->register_class(@$_) for (@to_register);
-
-  foreach my $source (keys %sources) {
-    my $r_class = delete $results{$source};
-    if($r_class) {
-      my $r_set = $class->source($source)->result_class;
-      if(!$r_set || $r_set eq $sources{$source}) {
-        $class->ensure_class_loaded($r_class);
-        $class->source($source)->result_class($r_class);
-      }
-      else {
-        warn "We found Result class '$r_class' for '$source', but it seems "
-           . "that you had already set '$source' to use '$r_set' instead";
-      }
-    }
-  }
-
   foreach (sort keys %results) {
     warn "load_namespaces found Result class $_ with no "
       . 'corresponding ResultSource';
   }
 
+  Class::C3->reinitialize;
+  $class->register_class(@$_) for (@to_register);
+
   return;
 }