package Class::Component::Component::AutoloadPlugin;
use strict;
use warnings;
sub autoload_plugins {
my($class, @plugins) = @_;
for my $plugin (@plugins) {
my $name = ref $plugin ? $plugin->{module} : $plugin;
unless (_is_loaded($class, $name)) {
$class->load_plugins($plugin);
}
}
}
sub _is_loaded {
my ($c, $stuff) = @_;
my $base = ref $c || $c;
for my $plugin (@{ $c->class_component_plugins }) {
my $module = ref $plugin;
my $pkg = $stuff;
unless (($pkg = $stuff) =~ s/^\+//) {
$module =~ s/^$base\::Plugin\:://;
}
return 1 if $pkg eq $module;
}
return;
}
1;