svn merge -r 10899:10927 http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Runtime/5.80/branches/pass_component_names
my $suffix = Catalyst::Utils::class2classsuffix( $component );
my $config = $class->config->{ $suffix } || {};
-
- # 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;
-
++ $config->{_component_name} = $component; # Put this in args here, rather
++ # than in COMPONENT as there
++ # are lots of custom COMPONENT
++ # methods..
my $instance = eval { $component->COMPONENT( $class, $config ); };
if ( my $error = $@ ) {
__PACKAGE__->mk_classdata('_plugins');
__PACKAGE__->mk_classdata('_config');
-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;
-};
++has _component_name => ( is => 'ro' );
+
sub BUILDARGS {
my $class = shift;
my $args = {};
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, $case_s) || '';
- my $namespace = Catalyst::Utils::class2prefix($self->_component_name, $case_s) || '';
++ my $namespace = Catalyst::Utils::class2prefix(ref($self) ? $self->_component_name : $self, $case_s) || '';
$self->$orig($namespace) if ref($self);
return $namespace;
};
sub register_action_methods {
my ( $self, $c, @methods ) = @_;
- my $class = ref $self || $self;
- my $class = $self->_component_name;
++ my $class = blessed($self) ? $self->_component_name : $self;
#this is still not correct for some reason.
my $namespace = $self->action_namespace($c);