for my $name (qw/ config components plugins methods hooks /) {
my $method = "class_component_$name";
no strict 'refs';
*{__PACKAGE__."::$method"} = sub { shift->{"_$method"} };
}
####
sub new {
my($class, $c, $args) = @_;
$args ||= {};
my $self = bless {
%{ $args },
_class_component_plugins => [],
_class_component_components => $default_components->{$c},
_class_component_methods => {},
_class_component_hooks => {},
_class_component_config => $args->{config} || {},
_class_component_default_plugins => $default_plugins->{$c},
}, $c;
$self->load_plugins(@{ $default_plugins->{$c} }, @{ $args->{load_plugins} || [] });
$self;
}
####
my @class_component = grep /^class_component_/ keys %$self ;
####
build_accessors(@class_component) unless $build_accessors++;