use base 'Class::C3::Componentised';
- sub component_base_class { "MyModule::Plugin" }
+ sub component_base_class { "MyModule::Component" }
package main;
- MyModule->load_components( $self->{plugins} );
+ MyModule->load_components( qw/Foo Bar/ );
+ # Will load MyModule::Component::Foo an MyModule::Component::Bar
+
+=head1 DESCRIPTION
+
+This will inject base classes to your module using the L<Class::C3> method
+resolution order.
+
+Please note: these are not plugins that can take precedence over methods
+declared in MyModule. If you want something like that, consider
+L<MooseX::Object::Pluggable>.
=head1 METHODS
use Class::Inspector;
use Carp;
-our $VERSION = 1.0000;
+our $VERSION = 1.0003;
=head2 load_components( @comps )
croak "Invalid class name $f_class"
if ($f_class=~m/(?:\b:\b|\:{3,})/);
return if Class::Inspector->loaded($f_class);
- eval "require $f_class"; # require needs a bareword or filename
+ my $file = $f_class . '.pm';
+ $file =~ s{::}{/}g;
+ eval { CORE::require($file) }; # require needs a bareword or filename
if ($@) {
if ($class->can('throw_exception')) {
$class->throw_exception($@);
Class::Inspector->installed($f_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
-sub _load_optional_class {
- my ($class, $f_class) = @_;
- if ($class->ensure_class_found($f_class)) {
- $class->ensure_class_loaded($f_class);
- return 1;
- } else {
- return 0;
- }
-}
=head2 inject_base
{
no strict 'refs';
foreach my $to (reverse @to_inject) {
- unshift( @{"${target}::ISA"}, $to )
+ unshift ( @{"${target}::ISA"}, $to )
unless ($target eq $to || $target->isa($to));
}
}