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=7e398ca5c7ce6aaa5b4f0e350a904bfbe8bf0a0e;hpb=9c1700e39e6ee002d9294c0d988882d1f0d7d86f;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Componentised.pm b/lib/DBIx/Class/Componentised.pm index 7e398ca..47797cc 100644 --- a/lib/DBIx/Class/Componentised.pm +++ b/lib/DBIx/Class/Componentised.pm @@ -7,14 +7,14 @@ use warnings; use base 'Class::C3::Componentised'; use mro 'c3'; -use Carp::Clan qw/^DBIx::Class|^Class::C3::Componentised/; +use DBIx::Class::Carp '^DBIx::Class|^Class::C3::Componentised'; use namespace::clean; - -my $warned; - # 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) = @_; @@ -40,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 documentation 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; } } @@ -75,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(@_); }