X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FComponent.pm;h=8a21a4622b087585d76c2aa66c6cfff1a9a0b1fd;hb=f76c40f0fe2e1c79215f6e9353b69fbda816824e;hp=2fd718116a7502b9491214a3dd96e163579297bf;hpb=2a787673114b4301db87cfccddcae82c8cf2791a;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Component.pm b/lib/Catalyst/Component.pm index 2fd7181..8a21a46 100644 --- a/lib/Catalyst/Component.pm +++ b/lib/Catalyst/Component.pm @@ -63,14 +63,12 @@ __PACKAGE__->mk_classdata('_config'); has catalyst_component_name => ( is => 'ro' ); # Cannot be required => 1 as context # class @ISA component - HATE -# Make accessor callable as a class method, as we need to call setup_actions -# on the application class, which we don't have an instance of, ewwwww -# Also, naughty modules like Catalyst::View::JSON try to write to _everything_, +# Naughty modules like Catalyst::View::JSON try to write to _everything_, # so spit a warning, ignore that (and try to do the right thing anyway) here.. around catalyst_component_name => sub { my ($orig, $self) = (shift, shift); Carp::cluck("Tried to write to the catalyst_component_name accessor - is your component broken or just mad? (Write ignored - using default value.)") if scalar @_; - blessed($self) ? $self->$orig() || blessed($self) : $self; + return $self->$orig() || blessed($self); }; sub BUILDARGS { @@ -127,7 +125,7 @@ sub config { # TODO maybe this should be a ClassData option? my $class = blessed($self) || $self; my $meta = Class::MOP::get_metaclass_by_name($class); - unless ($meta->has_package_symbol('$_config')) { + unless (${ $meta->get_or_add_package_symbol('$_config') }) { # Call merge_hashes to ensure we deep copy the parent # config onto the subclass $self->_config( Catalyst::Utils::merge_hashes($config, {}) ); @@ -170,7 +168,7 @@ to be stored in the application's component hash. C<< my $component_instance = $component->COMPONENT($app, $arguments); >> -If this method is present (as it is on all Catalyst::Component subclasses, +If this method is present (as it is on all Catalyst::Component subclasses), it is called by Catalyst during setup_components with the application class as $app and any config entry on the application for this component (for example, in the case of MyApp::Controller::Foo this would be @@ -200,6 +198,12 @@ key value pair, or you can specify a hashref. In either case the keys will be merged with any existing config settings. Each component in a Catalyst application has its own config hash. +The component's config hash is merged with any config entry on the +application for this component and passed to C (as mentioned +above at L). The common practice to access the merged +config is to use a Moose attribute for each config entry on the +receiving component. + =head2 $c->process() This is the default method called on a Catalyst component in the dispatcher.