Fixed _register_source to not produce 'register_extra_source' warnings
Jason M. Mills [Tue, 24 Mar 2009 07:49:54 +0000 (07:49 +0000)]
when "registering class" isa (or is a sub-class) source class.
This is not exactly an elegant fix as I had to pass a hash key (as _to_register via $params) with the original source class instance; I was not able to determine inheritance via the result_source_instance (ResultSource::Table) object.

lib/DBIx/Class/Schema.pm
t/39load_namespaces_rt41083.t

index cf7267d..413fe78 100644 (file)
@@ -1221,7 +1221,9 @@ calling:
 
 sub register_class {
   my ($self, $moniker, $to_register) = @_;
-  $self->register_source($moniker => $to_register->result_source_instance);
+  $self->register_source($moniker => $to_register->result_source_instance, {
+    _to_register => $to_register
+  });
 }
 
 =head2 register_source
@@ -1279,7 +1281,11 @@ sub _register_source {
 
   if ($source->result_class) {
     my %map = %{$self->class_mappings};
-    if (exists $map{$source->result_class}) {
+    my $is_subof = $params->{_to_register} && UNIVERSAL::isa(
+        $params->{_to_register},
+        $source->result_class
+    );
+    if (exists $map{$source->result_class} && !$is_subof) {
       warn $source->result_class . ' already has a source, use register_extra_source for additional sources';
     }
     $map{$source->result_class} = $moniker;
index 7d8dc5c..e0620fe 100644 (file)
@@ -32,7 +32,7 @@ eval {
 };
 ok(!$@) or diag $@;
 ok(_chk_warning($warnings), 'expected no resultset complaint');
-ok(_chk_extra_sources_warning($warnings), 'expected no extra sources complaint');
+ok(_chk_extra_sources_warning($warnings), 'expected no extra sources complaint') or diag($warnings);
 undef $warnings;
 
 eval {
@@ -47,5 +47,5 @@ eval {
 };
 ok(!$@) or diag $@;
 ok(_chk_warning($warnings), 'expected no resultset complaint') or diag $warnings;
-ok(_chk_extra_sources_warning($warnings), 'expected no extra sources complaint');
+ok(_chk_extra_sources_warning($warnings), 'expected no extra sources complaint') or diag($warnings);
 undef $warnings;