X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FController.pm;h=27b5d0fe1a7762e6019686be3ad91d031217e406;hb=d0f30dbc4d81780d345a80328c6f8396084e8ac8;hp=49591d3b64e24ea8586436d5c9f255d37d7c2e9d;hpb=e9ba5c119a81f59f8339cd5c749709f5bc56b6d6;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Controller.pm b/lib/Catalyst/Controller.pm index 49591d3..27b5d0f 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,9 @@ sub register_action_methods { foreach my $method (@methods) { my $name = $method->name; - my $attributes = $method->attributes; + # Horrible hack! All method metaclasses should have an attributes + # method, core Moose bug - see r13354. + 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 +251,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 +267,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 +540,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