my $suffix = Catalyst::Utils::class2classsuffix( $component );
my $config = $class->config->{ $suffix } || {};
-- $config->{_component_name} = $component; # Put this in args here, rather
-- # than in COMPONENT as there
-- # are lots of custom COMPONENT
-- # methods..
++ # Stash _component_name in the config here, so that custom COMPONENT
++ # methods also pass it. local to avoid pointlessly shitting in config
++ # for the debug screen, as $component is already the key name.
++ local $config->{_component_name} = $component;
++
my $instance = eval { $component->COMPONENT( $class, $config ); };
if ( my $error = $@ ) {
__PACKAGE__->mk_classdata('_plugins');
__PACKAGE__->mk_classdata('_config');
--has _component_name => ( is => 'ro' );
++has _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
++around _component_name => sub {
++ my ($orig, $self) = (shift, shift);
++ blessed($self) ? $self->$orig(@_) : $self;
++};
sub BUILDARGS {
my $class = shift;
return $class->new($app, $args);
}
--=head2 _component_name
--
--The name of the component within an application. This is used to
--pass the component's name to actions generated (becoming
--C<< $action->class >>). This is needed so that the L</COMPONENT> method can
--return an instance of a different class (e.g. a L<Class::MOP> anonymous class),
--(as finding the component name by C<< ref($self) >> will not work correctly in
--such cases).
--
=head2 $c->config
=head2 $c->config($hashref)
}
}
-- my $namespace = Catalyst::Utils::class2prefix(ref($self) ? $self->_component_name : $self, $case_s) || '';
++ my $namespace = Catalyst::Utils::class2prefix($self->_component_name, $case_s) || '';
$self->$orig($namespace) if ref($self);
return $namespace;
};
sub register_action_methods {
my ( $self, $c, @methods ) = @_;
-- my $class = blessed($self) ? $self->_component_name : $self;
++ my $class = $self->_component_name;
#this is still not correct for some reason.
my $namespace = $self->action_namespace($c);
++ # Uncomment as soon as you fix the tests :)
++ #if (!blessed($self) && $self eq $c && scalar(@methods)) {
++ # $c->log->warn("Action methods found defined in your application class, $self. This is deprecated, please move them into a Root controller.");
++ #}
++
foreach my $method (@methods) {
my $name = $method->name;
my $attributes = $method->attributes;