X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FC3%2FComponentised.pm;h=5d8c73be08ef687650d9414f61164b508a712fc5;hb=b0dd4f7ba77d3889d34af444ac19b8760a877305;hp=d1d48ba7280c855209e22f58549e60dd9429f210;hpb=0b8e135aee0990f36d0ef70e28ce21ddcd842bfb;p=p5sagit%2FClass-C3-Componentised.git diff --git a/lib/Class/C3/Componentised.pm b/lib/Class/C3/Componentised.pm index d1d48ba..5d8c73b 100644 --- a/lib/Class/C3/Componentised.pm +++ b/lib/Class/C3/Componentised.pm @@ -46,7 +46,7 @@ use MRO::Compat; use Class::Inspector; use Carp; -our $VERSION = 1.0003; +our $VERSION = 1.0005; =head2 load_components( @comps ) @@ -60,14 +60,18 @@ Calling this will call C. 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, but assumes every class is C<"$class::$comp">. +Similar to L, but assumes every class is C<"$class::$comp">. =cut @@ -95,9 +99,12 @@ found. 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; @@ -168,6 +175,32 @@ sub inject_base { 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