=cut
-__PACKAGE__->mk_classdata($_) for qw/_config _plugins/;
+__PACKAGE__->mk_classdata('_plugins');
+__PACKAGE__->mk_classdata('_config');
around new => sub {
my ( $orig, $self) = @_;
sub config {
my $self = shift;
- my $config = $self->_config ||{};
+ my $config = $self->_config || {};
if (@_) {
my $newconfig = { %{@_ > 1 ? {@_} : $_[0]} };
$self->_config(
$self->merge_config_hashes( $config, $newconfig )
);
+ } else {
+ # this is a bit of a kludge, required to make
+ # __PACKAGE__->config->{foo} = 'bar';
+ # work in a subclass. If we don't have the package symbol in the
+ # current class we know we need to copy up to ours, which calling
+ # the setter will do for us.
+
+ unless ($self->meta->has_package_symbol('$_config')) {
+
+ $config = $self->merge_config_hashes( $config, {} );
+ $self->_config( $config );
+ }
}
return $config;
}
. " did not override Catalyst::Component::process" );
}
+
+__PACKAGE__->meta->make_immutable;
1;
__END__