inject_base filters out double entries
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Componentised.pm
index d4a6641..7e62354 100644 (file)
@@ -1,4 +1,8 @@
-package DBIx::Class::Componentised;
+package # hide from PAUSE
+    DBIx::Class::Componentised;
+
+use strict;
+use warnings;
 
 use Class::C3;
 
@@ -6,7 +10,11 @@ sub inject_base {
   my ($class, $target, @to_inject) = @_;
   {
     no strict 'refs';
-    unshift(@{"${target}::ISA"}, grep { $target ne $_ && !$target->isa($_)} @to_inject);
+    my %seen;
+    unshift( @{"${target}::ISA"},
+        grep { !$seen{ $_ }++ && $target ne $_ && !$target->isa($_) }
+            @to_inject
+    );
   }
 
   # Yes, this is hack. But it *does* work. Please don't submit tickets about
@@ -20,7 +28,7 @@ sub inject_base {
 sub load_components {
   my $class = shift;
   my $base = $class->component_base_class;
-  my @comp = map { "${base}::$_" } grep { $_ !~ /^#/ } @_;
+  my @comp = map { /^\+(.*)$/ ? $1 : "${base}::$_" } grep { $_ !~ /^#/ } @_;
   $class->_load_components(@comp);
   Class::C3::reinitialize();
 }