Added code ...
Justin Guenther [Tue, 6 Jun 2006 22:48:05 +0000 (22:48 +0000)]
lib/DBIx/Class/Componentised.pm
t/05components.t

index e23a0b4..412958f 100644 (file)
@@ -12,8 +12,19 @@ sub inject_base {
   {
     no strict 'refs';
     foreach my $to (reverse @to_inject) {
-       unshift( @{"${target}::ISA"}, $to )
-         unless ($target eq $to || $target->isa($to));
+      my @comps = qw(DigestColumns ResultSetManager Ordered UTF8Columns);
+           # Add components here that need to be loaded before Core
+      foreach my $first_comp (@comps) {
+        if ($to eq 'DBIx::Class::Core' &&
+            $target->isa("DBIx::Class::${first_comp}")) {
+          warn "Possible incorrect order of components in ".
+               "${target}::load_components($first_comp) call: Core loaded ".
+               "before $first_comp. See the documentation for ".
+               "DBIx::Class::$first_comp for more information";
+        }
+      }
+      unshift( @{"${target}::ISA"}, $to )
+        unless ($target eq $to || $target->isa($to));
     }
   }
 
@@ -54,8 +65,8 @@ sub ensure_class_loaded {
   eval "require $f_class";
   my $err = $@;
   Class::Inspector->loaded($f_class)
-      or die $err || "require $f_class was successful but the package".
-                     "is not defined";
+    or die $err || "require $f_class was successful but the package".
+                   "is not defined";
 }
 
 1;
index 4b063bf..567bc1b 100644 (file)
@@ -7,7 +7,7 @@ use Test::More;
 use lib qw(t/lib);
 use DBICTest::ForeignComponent;
 
-plan tests => 2;
+plan tests => 5;
 
 #   Tests if foreign component was loaded by calling foreign's method
 ok( DBICTest::ForeignComponent->foreign_test_method, 'foreign component' );
@@ -34,3 +34,31 @@ is_deeply( \@DBICTest::_InjectBaseTest::ISA,
     /],
     'inject_base filters duplicates'
 );
+
+# Test for a warning with incorrect order in load_components
+my @warnings = ();
+{
+  package A::Test;
+  our @ISA = 'DBIx::Class';
+  {
+    local $SIG{__WARN__} = sub { push @warnings, shift};
+    __PACKAGE__->load_components(qw(Core UTF8Columns));
+  }
+}
+like( $warnings[0], qr/Core loaded before UTF8Columns/,
+      'warning issued for incorrect order in load_components()' );
+is( scalar @warnings, 1,
+    'only one warning issued for incorrect load_components call' );
+
+# Test that no warning is issued for the correct order in load_components
+{
+  @warnings = ();
+  package B::Test;
+  our @ISA = 'DBIx::Class';
+  {
+    local $SIG{__WARN__} = sub { push @warnings, shift };
+    __PACKAGE__->load_components(qw(UTF8Columns Core));
+  }
+}
+is( scalar @warnings, 0,
+    'warning not issued for correct order in load_components()' );