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';
} elsif (Class::MOP::is_class_loaded($_[0]) &&
$_[0]->isa('Catalyst') && ref($_[1]) eq 'HASH') {
$args = $_[1];
- } elsif ($_[0] == $_[1]) {
- $args = $_[1];
} else {
$args = +{ @_ };
}
. " did not override Catalyst::Component::process" );
}
+sub expand_modules {
+ my ($class, $component) = @_;
+ return Devel::InnerPackage::list_packages( $component );
+}
+
__PACKAGE__->meta->make_immutable;
1;
=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.
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.
Merges two hashes together recursively, giving right-hand precedence.
Alias for the method in L<Catalyst::Utils>.
+=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)