X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FComponentised.pm;h=47797cce14a32e4cb496edbf9def06c37d821e89;hb=bb768302f9abecbd4a32090ba38d5938a009bd7b;hp=17eb4f3a5a9934d5c91fcedfd4c6af30597f5ea2;hpb=3c2a505c93702ae84fca6985e306da721de2830a;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Componentised.pm b/lib/DBIx/Class/Componentised.pm index 17eb4f3..47797cc 100644 --- a/lib/DBIx/Class/Componentised.pm +++ b/lib/DBIx/Class/Componentised.pm @@ -5,13 +5,16 @@ use strict; use warnings; use base 'Class::C3::Componentised'; -use Carp::Clan qw/^DBIx::Class|^Class::C3::Componentised/; use mro 'c3'; -my $warned; +use DBIx::Class::Carp '^DBIx::Class|^Class::C3::Componentised'; +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) = @_; @@ -37,8 +40,8 @@ sub inject_base { for (qw/DBIx::Class::UTF8Columns DBIx::Class::ForceUTF8/) { if ($comp->isa ($_) ) { $keep_checking = 0; # no use to check from this point on - carp "Use of $_ is strongly discouraged. See documentationm of DBIx::Class::UTF8Columns for more info\n" - unless ($warned->{UTF8Columns}++ || $ENV{DBIC_UTF8COLUMNS_OK}); + carp_once "Use of $_ is strongly discouraged. See documentation of DBIx::Class::UTF8Columns for more info\n" + unless $ENV{DBIC_UTF8COLUMNS_OK}; last; } } @@ -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(@_); }