Start setting the 'c3' mro unambiguously everywhere
authorPeter Rabbitson <ribasushi@cpan.org>
Tue, 19 Apr 2016 12:13:03 +0000 (14:13 +0200)
committerPeter Rabbitson <ribasushi@cpan.org>
Wed, 20 Apr 2016 10:53:59 +0000 (12:53 +0200)
commitd009cb7d393292037eff527a9f8bab93860224fb
treeb80beced2b59040ed0b4688bb7c163d1574ac444
parentcb421b66e82092e8fab0ed3a002061f7a4b9a641
Start setting the 'c3' mro unambiguously everywhere

This is a necessary part of the rsrc refactor, which there is no way around.
And yes - it is extremely invasive and dangerous, with very high chance of
fallout. Given the situation there is no other way :/

The implementation itself is rather simple: all we need to do is hook
inject_base (which is called by load_components via several levels of
indirection), and also (as a precaution) we set the mro on anything loaded
via a component-group accessor. This seems to nicely cover pretty much all
of the hierarchy (except ::Storage, but that is another matter/rewrite)

Also move the CAG compat pieces where they belong
Changes
lib/DBIx/Class.pm
lib/DBIx/Class/AccessorGroup.pm
lib/DBIx/Class/ResultSet.pm
lib/DBIx/Class/ResultSource.pm
lib/DBIx/Class/ResultSourceProxy.pm
lib/DBIx/Class/Schema.pm
xt/dist/pod_coverage.t
xt/extra/c3_mro.t