In d009cb7d I stupidly created a "double around()"
Peter Rabbitson [Wed, 4 May 2016 16:10:33 +0000 (18:10 +0200)]
Consolidate all the logic in DBIC::Componentised instead

lib/DBIx/Class.pm
lib/DBIx/Class/Componentised.pm

index f1c80ae..e7c6126 100644 (file)
@@ -39,18 +39,6 @@ BEGIN {
 
 sub component_base_class { 'DBIx::Class' }
 
-my $mro_already_set;
-sub inject_base {
-
-  # only examine from $_[2] onwards
-  # C::C3::C already sets c3 on $_[1] and $_[0] is irrelevant
-  mro::set_mro( $_ => 'c3' ) for grep {
-    $mro_already_set->{$_} ? 0 : ( $mro_already_set->{$_} = 1 )
-  } @_[2 .. $#_];
-
-  shift->next::method(@_);
-}
-
 sub MODIFY_CODE_ATTRIBUTES {
   my ($class,$code,@attrs) = @_;
   $class->mk_classaccessor('__attr_cache' => {})
index 0fb91ad..47797cc 100644 (file)
@@ -12,6 +12,9 @@ use namespace::clean;
 
 # this warns of subtle bugs introduced by UTF8Columns hacky handling of store_column
 # if and only if it is placed before something overriding store_column
+#
+# and also enforces C3 mro on all components
+my $mro_already_set;
 sub inject_base {
   my $class = shift;
   my ($target, @complist) = @_;
@@ -72,6 +75,12 @@ sub inject_base {
     unshift @target_isa, $comp;
   }
 
+  # only examine from $_[2] onwards
+  # C::C3::C already sets c3 on $_[1]
+  mro::set_mro( $_ => 'c3' ) for grep {
+    $mro_already_set->{$_} ? 0 : ( $mro_already_set->{$_} = 1 )
+  } @_[1 .. $#_];
+
   $class->next::method(@_);
 }