use Carp ();
-our $VERSION = 1.0008;
+our $VERSION = 1.0009;
my $invalid_class = qr/(?: \b:\b | \:{3,} | \:\:$ )/x;
my $class = shift;
my $target = shift;
- for (reverse @_) {
+ mro::set_mro($target, 'c3');
+
+ for my $comp (reverse @_) {
no strict 'refs';
- unshift ( @{"${target}::ISA"}, $_ )
- unless ($target eq $_ || $target->isa($_));
- }
+ unless ($target eq $comp || $target->isa($comp)) {
+ my @heritage = @{mro::get_linear_isa($comp)};
+
+ my @before = map {
+ my $to_run = $Class::C3::Componentised::ApplyHooks::Before{$_};
+ ($to_run?[$_,$to_run]:())
+ } @heritage;
+
+ for my $todo (@before) {
+ my ($parent, $fn) = @$todo;
+ for my $f (reverse @$fn) {
+ $target->$f($parent)
+ }
+ }
- mro::set_mro($target, 'c3');
+ unshift ( @{"${target}::ISA"}, $comp );
+
+ my @after = map {
+ my $to_run = $Class::C3::Componentised::ApplyHooks::After{$_};
+ ($to_run?[$_,$to_run]:())
+ } @heritage;
+
+ for my $todo (reverse @after) {
+ my ($parent, $fn) = @$todo;
+ for my $f (@$fn) {
+ $target->$f($parent)
+ }
+ }
+ }
+ }
}
=head2 load_optional_class
}
}
-=head1 AUTHOR
+=head1 AUTHORS
-Matt S. Trout and the DBIx::Class team
+Matt S. Trout and the L<DBIx::Class team|DBIx::Class/CONTRIBUTORS>
Pulled out into seperate module by Ash Berlin C<< <ash@cpan.org> >>
+Optimizations and overall bolt-tightening by Peter "ribasushi" Rabbitson
+C<< <ribasushi@cpan.org> >>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2006 - 2011 the Class::C3::Componentised L</AUTHORS> as listed
+above.
+
=head1 LICENSE
You may distribute this code under the same terms as Perl itself.