From: Tomas Doran Date: Sat, 1 Aug 2009 02:00:23 +0000 (+0000) Subject: Aww, crap, fail. merge 10927:HEAD from pass_component_names X-Git-Tag: 5.80008~42 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=d2598ac82e8508f4d6da90ec60a1ed60840c2016 Aww, crap, fail. merge 10927:HEAD from pass_component_names --- d2598ac82e8508f4d6da90ec60a1ed60840c2016 diff --cc lib/Catalyst.pm index b601962,cae8936..7556e34 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@@ -2215,10 -2216,10 +2215,11 @@@ sub setup_component 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 = $@ ) { diff --cc lib/Catalyst/Component.pm index c065664,c065664..ee1f99a --- a/lib/Catalyst/Component.pm +++ b/lib/Catalyst/Component.pm @@@ -60,7 -60,7 +60,14 @@@ component loader with config() support __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; @@@ -172,15 -172,15 +179,6 @@@ something like this 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 method can --return an instance of a different class (e.g. a L 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) diff --cc lib/Catalyst/Controller.pm index 37e36e1,37e36e1..c8db2e7 --- a/lib/Catalyst/Controller.pm +++ b/lib/Catalyst/Controller.pm @@@ -156,7 -156,7 +156,7 @@@ around action_namespace => sub } } -- 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; }; @@@ -207,10 -207,10 +207,15 @@@ sub register_actions 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;