# Therefore leaving it in indefinitely.
use MRO::Compat;
-use Carp;
+use Carp ();
-our $VERSION = 1.0006;
+our $VERSION = 1.0008;
+
+my $invalid_class = qr/(?: \b:\b | \:{3,} | \:\:$ )/x;
=head2 load_components( @comps )
return if ( *{"${f_class}::$_"}{CODE} );
}
-
# require always returns true on success
- eval { require($file) } or do {
+ # ill-behaved modules might very well obliterate $_
+ eval { local $_; require($file) } or do {
- $@ = "Invalid class name $f_class"
- if ($f_class=~m/(?:\b:\b|\:{3,})/);
+ $@ = "Invalid class name '$f_class'" if $f_class =~ $invalid_class;
if ($class->can('throw_exception')) {
$class->throw_exception($@);
} else {
- croak $@;
+ Carp::croak $@;
}
};
my $class = shift;
my $target = shift;
- my %isa = map { $_ => 1 } ($target, @{mro::get_linear_isa($target)} );
-
for (reverse @_) {
no strict 'refs';
- unless ($isa{$_}++) {
- unshift ( @{"${target}::ISA"}, $_ );
- }
+ unshift ( @{"${target}::ISA"}, $_ )
+ unless ($target eq $_ || $target->isa($_));
}
mro::set_mro($target, 'c3');
my $err = $@; # so we don't lose it
- my $fn = quotemeta( (join ('/', split ('::', $f_class) ) ) . '.pm' );
- if ($err =~ /Can't locate ${fn} in \@INC/ ) {
- return 0;
+ if ($f_class =~ $invalid_class) {
+ $err = "Invalid class name '$f_class'";
+ }
+ else {
+ my $fn = quotemeta( (join ('/', split ('::', $f_class) ) ) . '.pm' );
+ return 0 if ($err =~ /Can't locate ${fn} in \@INC/ );
}
- elsif ($class->can('throw_exception')) {
+
+ if ($class->can('throw_exception')) {
$class->throw_exception($err);
}
else {
}
}
-=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.