From: Tomas Doran Date: Fri, 31 Jul 2009 02:01:32 +0000 (+0000) Subject: Clean up branch. I'm happy with this (bar the eww, as commented) and intend to merge... X-Git-Tag: 5.80008~43^2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=88fbc3be375826767516ba3a8e65f50cf768e52f Clean up branch. I'm happy with this (bar the eww, as commented) and intend to merge pre 0008, please review --- diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index cae8936..b238376 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -2216,10 +2216,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 --git a/lib/Catalyst/Component.pm b/lib/Catalyst/Component.pm index c065664..ee1f99a 100644 --- a/lib/Catalyst/Component.pm +++ b/lib/Catalyst/Component.pm @@ -60,7 +60,14 @@ component loader with config() support and a process() method placeholder. __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 +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 --git a/lib/Catalyst/Controller.pm b/lib/Catalyst/Controller.pm index 37e36e1..c8db2e7 100644 --- a/lib/Catalyst/Controller.pm +++ b/lib/Catalyst/Controller.pm @@ -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,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;