use strict;
use warnings;
+# see Makefile.PL for discussion on why we load both Class::C3 and MRO::Compat
+use Class::C3 ();
use MRO::Compat;
use Class::Inspector;
use Carp;
-our $VERSION = 1.0003;
+our $VERSION = 1.0005;
=head2 load_components( @comps )
sub load_components {
my $class = shift;
- my $base = $class->component_base_class;
- my @comp = map { /^\+(.*)$/ ? $1 : "${base}::$_" } grep { $_ !~ /^#/ } @_;
+ my @comp = map {
+ /^\+(.*)$/
+ ? $1
+ : join ('::', $class->component_base_class, $_)
+ }
+ grep { $_ !~ /^#/ } @_;
$class->_load_components(@comp);
}
=head2 load_own_components( @comps )
-Simialr to L<load_components>, but assumes every class is C<"$class::$comp">.
+Similar to L<load_components>, but assumes every class is C<"$class::$comp">.
=cut
sub load_optional_components {
my $class = shift;
- my $base = $class->component_base_class;
my @comp = grep { $class->load_optional_class( $_ ) }
- map { /^\+(.*)$/ ? $1 : "${base}::$_" }
+ map {
+ /^\+(.*)$/
+ ? $1
+ : join ('::', $class->component_base_class, $_)
+ }
grep { $_ !~ /^#/ } @_;
$class->_load_components( @comp ) if scalar @comp;
mro::set_mro($target, 'c3');
}
+=head2 load_optional_class
+
+Returns a true value if the specified class is installed and loaded
+successfully, throws an exception if the class is found but not loaded
+successfully, and false if the class is not installed
+
+=cut
+
+sub load_optional_class {
+ my ($class, $f_class) = @_;
+ eval { $class->ensure_class_loaded($f_class) };
+ my $err = $@; # so we don't lose it
+ if (! $err) {
+ return 1;
+ }
+ else {
+ my $fn = (join ('/', split ('::', $f_class) ) ) . '.pm';
+ if ($err =~ /Can't locate ${fn} in \@INC/ ) {
+ return 0;
+ }
+ else {
+ die $err;
+ }
+ }
+}
+
=head1 AUTHOR
Matt S. Trout and the DBIx::Class team