use Moose;
use Moose::Util qw/find_meta/;
-
+use List::MoreUtils qw/uniq/;
use namespace::clean -except => 'meta';
BEGIN { extends qw/Catalyst::Component MooseX::MethodAttributes::Inheritable/; }
my ( $self, $c ) = @_;
my $class = ref($self) || $self;
- my $appclass = ref($c) || $c;
if( ref($self) ){
return $self->$orig if $self->has_action_namespace;
} else {
return $class->config->{namespace} if exists $class->config->{namespace};
}
- my $case_s;
- if( $c ){
- $case_s = $appclass->config->{case_sensitive};
- } else {
- if ($self->isa('Catalyst')) {
- $case_s = $class->config->{case_sensitive};
- } else {
- if (ref $self) {
- $case_s = ref($self->_application)->config->{case_sensitive};
- } else {
- confess("Can't figure out case_sensitive setting");
- }
- }
- }
-
- my $namespace = Catalyst::Utils::class2prefix($self->catalyst_component_name, $case_s) || '';
+ my $namespace = Catalyst::Utils::class2prefix($self->catalyst_component_name) || '';
$self->$orig($namespace) if ref($self);
return $namespace;
};
. $meta->name
. " cannot support register_actions." )
unless $meta->can('get_nearest_methods_with_attributes');
+ my @methods = $meta->get_nearest_methods_with_attributes;
- # Find (and de-dup) action methods from attributes and those from config.
- my %methods = (
- map({ $_->name => 1 } $meta->get_nearest_methods_with_attributes),
- %{ $self->_controller_actions }
- );
-
- if (ref $self) {
- foreach (keys %methods) {
+ # actions specified via config are also action_methods
+ push(
+ @methods,
+ map {
$meta->find_method_by_name($_)
|| confess( 'Action "'
. $_
. '" is not available from controller '
- . ( ref $self ) );
- }
- }
- return keys %methods;
+ . ( ref $self ) )
+ } keys %{ $self->_controller_actions }
+ ) if ( ref $self );
+ return uniq @methods;
}
#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.");
- #}
+ # FIXME - fugly
+ if (!blessed($self) && $self eq $c && scalar(@methods)) {
+ my @really_bad_methods = grep { ! /^_(DISPATCH|BEGIN|AUTO|ACTION|END)$/ } map { $_->name } @methods;
+ if (scalar(@really_bad_methods)) {
+ $c->log->warn("Action methods (" . join(', ', @really_bad_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;