X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FController.pm;h=7645d01e60c04695553662b363ec5bd93b4ad9f0;hb=3c0da3ece98e535f1c168bb985980583498894ad;hp=0b197b0195d35c9b292feca7bf13d6783d8d3d05;hpb=5b41c28c51565fdb5325f597edf9371649e3f5db;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Controller.pm b/lib/Catalyst/Controller.pm index 0b197b0..7645d01 100644 --- a/lib/Catalyst/Controller.pm +++ b/lib/Catalyst/Controller.pm @@ -333,6 +333,8 @@ sub create_action { unless ($args{name} =~ /^_(DISPATCH|BEGIN|AUTO|ACTION|END)$/) { my @roles = $self->gather_action_roles(%args); + push @roles, $self->gather_default_action_roles(%args); + $class = $self->_apply_action_class_roles($class, @roles) if @roles; } @@ -352,13 +354,20 @@ sub create_action { sub gather_action_roles { my ($self, %args) = @_; - return ( (blessed $self ? $self->_action_roles : ()), @{ $args{attributes}->{Does} || [] }, ); } +sub gather_default_action_roles { + my ($self, %args) = @_; + my @roles = (); + push @roles, 'Catalyst::ActionRole::HTTPMethods' + if $args{attributes}->{Method}; + return @roles; +} + sub _parse_attrs { my ( $self, $c, $name, @attrs ) = @_; @@ -694,6 +703,12 @@ Catalyst::Action (or appropriate sub/alternative class) object. Gathers the list of roles to apply to an action with the given %action_args. +=head2 $self->gather_default_action_roles(\%action_args) + +returns a list of action roles to be applied based on core, builtin rules. +Currently only the L role is applied +this way. + =head2 $self->_application =head2 $self->_app @@ -784,8 +799,12 @@ preferred to use L. =head2 MyAction -Set the ActionClass using a custom Action in your project namespace (such as -C => MyAction('MyAction'). +Set the ActionClass using a custom Action in your project namespace. + +The following is exactly the same: + + sub foo_action1 : Local ActionClass('+MyApp::Action::Bar') { ... } + sub foo_action2 : Local MyAction('Bar') { ... } =head2 Does @@ -807,7 +826,13 @@ C => MyAction('MyAction'). =head2 HEAD -Sets the give action path to match the specified HTTP method. +=head2 PATCH + +=head2 Method('...') + +Sets the give action path to match the specified HTTP method, or via one of the +broadly accepted methods of overriding the 'true' method (see +L). =head2 Args