X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FController.pm;h=faf4b8e725625dd5efc5716f227d1f2c5f9dce24;hb=a84683240a2c46b54f93e15b23b479f5f652f92f;hp=49591d3b64e24ea8586436d5c9f255d37d7c2e9d;hpb=e9ba5c119a81f59f8339cd5c749709f5bc56b6d6;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Controller.pm b/lib/Catalyst/Controller.pm index 49591d3..faf4b8e 100644 --- a/lib/Catalyst/Controller.pm +++ b/lib/Catalyst/Controller.pm @@ -71,14 +71,11 @@ for more info about how Catalyst dispatches to actions. #I think both of these could be attributes. doesn't really seem like they need #to ble class data. i think that attributes +default would work just fine -__PACKAGE__->mk_classdata($_) for qw/_dispatch_steps/; +__PACKAGE__->mk_classdata($_) for qw/_dispatch_steps _action_class/; __PACKAGE__->_dispatch_steps( [qw/_BEGIN _AUTO _ACTION/] ); +__PACKAGE__->_action_class('Catalyst::Action'); -has _action_class => ( - is => 'rw', - default => 'Catalyst::Action', -); sub _DISPATCH : Private { my ( $self, $c ) = @_; @@ -228,7 +225,7 @@ sub register_action_methods { foreach my $method (@methods) { my $name = $method->name; - my $attributes = $method->attributes; + my $attributes = $method->can('attributes') ? $method->attributes : []; my $attrs = $self->_parse_attrs( $c, $name, @{ $attributes } ); if ( $attrs->{Private} && ( keys %$attrs > 1 ) ) { $c->log->debug( 'Bad action definition "' @@ -252,11 +249,13 @@ sub register_action_methods { } sub action_class { - my ($self, %args) = @_; + my $self = shift; + my %args = @_; my $class = (exists $args{attributes}{ActionClass} - ? $args{attributes}{ActionClass}[0] - : $self->_action_class); + ? $args{attributes}{ActionClass}[0] + : $self->_action_class); + Class::MOP::load_class($class); return $class; } @@ -266,8 +265,8 @@ sub create_action { my %args = @_; my $class = $self->action_class(%args); - my $action_args = $self->config->{action_args}; + my %extra_args = ( %{ $action_args->{'*'} || {} }, %{ $action_args->{ $args{name} } || {} }, @@ -539,6 +538,11 @@ action methods for this package. Creates action objects for a set of action methods using C< create_action >, and registers them with the dispatcher. +=head2 $self->action_class(%args) + +Used when a controller is creating an action to determine the correct base +action class to use. + =head2 $self->create_action(%args) Called with a hash of data to be use for construction of a new