X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FComponent.pm;h=28da15562fb6e807019578264cdebb7d7c5b4afb;hb=fb34eb9c063c53abd061d260a30f0ca7c57a0833;hp=870418c1a8e59c26cb87a3a3aee20765f4501651;hpb=8f6cebb2303a0b0eda9422430f926c3f83c72aed;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Component.pm b/lib/Catalyst/Component.pm index 870418c..28da155 100644 --- a/lib/Catalyst/Component.pm +++ b/lib/Catalyst/Component.pm @@ -5,6 +5,7 @@ use Class::MOP; use Class::MOP::Object; use Catalyst::Utils; use Class::C3::Adopt::NEXT; +use Devel::InnerPackage (); use MRO::Compat; use mro 'c3'; use Scalar::Util 'blessed'; @@ -84,8 +85,6 @@ sub BUILDARGS { } elsif (Class::MOP::is_class_loaded($_[0]) && $_[0]->isa('Catalyst') && ref($_[1]) eq 'HASH') { $args = $_[1]; - } elsif ($_[0] == $_[1]) { - $args = $_[1]; } else { $args = +{ @_ }; } @@ -113,6 +112,8 @@ sub COMPONENT { sub config { my $self = shift; + # Uncomment once sane to do so + #Carp::cluck("config method called on instance") if ref $self; my $config = $self->_config || {}; if (@_) { my $newconfig = { %{@_ > 1 ? {@_} : $_[0]} }; @@ -147,6 +148,11 @@ sub process { . " did not override Catalyst::Component::process" ); } +sub expand_modules { + my ($class, $component) = @_; + return Devel::InnerPackage::list_packages( $component ); +} + __PACKAGE__->meta->make_immutable; 1; @@ -155,7 +161,7 @@ __END__ =head1 METHODS -=head2 new($c, $arguments) +=head2 new($app, $arguments) Called by COMPONENT to instantiate the component; should return an object to be stored in the application's component hash. @@ -164,11 +170,12 @@ 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 $c and any config entry on the application for this component (for example, +as $app and any config entry on the application for this component (for example, in the case of MyApp::Controller::Foo this would be C<< MyApp->config('Controller::Foo' => \%conf >>). + The arguments are expected to be a hashref and are merged with the C<< __PACKAGE__->config >> hashref before calling C<< ->new >> to instantiate the component. @@ -178,7 +185,7 @@ something like this: sub COMPONENT { my ($class, $app, $args) = @_; - $args = $self->merge_config_hashes($self->config, $args); + $args = $class->merge_config_hashes($class->config, $args); return $class->new($app, $args); } @@ -193,6 +200,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. @@ -204,6 +217,13 @@ when you forward to them. The default is an abstract method. Merges two hashes together recursively, giving right-hand precedence. Alias for the method in L. +=head2 $c->expand_modules( $setup_component_config ) + +Return a list of extra components that this component has created. By default, +it just looks for a list of inner packages of this component + +=cut + =head1 OPTIONAL METHODS =head2 ACCEPT_CONTEXT($c, @args)