X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FController.pm;h=15941723e2c16eba26572073bd67c5821e969f47;hb=1b666f0f00e409a24119e175633892a9fa2484f2;hp=0b197b0195d35c9b292feca7bf13d6783d8d3d05;hpb=5b41c28c51565fdb5325f597edf9371649e3f5db;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Controller.pm b/lib/Catalyst/Controller.pm index 0b197b0..1594172 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 ) = @_; @@ -468,25 +477,6 @@ sub _parse_Path_attr { } } -sub _parse_Regex_attr { - my ( $self, $c, $name, $value ) = @_; - return ( 'Regex', $value ); -} - -sub _parse_Regexp_attr { shift->_parse_Regex_attr(@_); } - -sub _parse_LocalRegex_attr { - my ( $self, $c, $name, $value ) = @_; - unless ( $value =~ s/^\^// ) { $value = "(?:.*?)$value"; } - - my $prefix = $self->path_prefix( $c ); - $prefix .= '/' if length( $prefix ); - - return ( 'Regex', "^${prefix}${value}" ); -} - -sub _parse_LocalRegexp_attr { shift->_parse_LocalRegex_attr(@_); } - sub _parse_Chained_attr { my ($self, $c, $name, $value) = @_; @@ -545,12 +535,12 @@ sub _parse_Does_attr { return Does => $self->_expand_role_shortname($value); } -sub _parse_GET_attr { Method => 'GET' } -sub _parse_POST_attr { Method => 'POST' } -sub _parse_PUT_attr { Method => 'PUT' } +sub _parse_GET_attr { Method => 'GET' } +sub _parse_POST_attr { Method => 'POST' } +sub _parse_PUT_attr { Method => 'PUT' } sub _parse_DELETE_attr { Method => 'DELETE' } sub _parse_OPTION_attr { Method => 'OPTION' } -sub _parse_HEAD_attr { Method => 'HEAD' } +sub _parse_HEAD_attr { Method => 'HEAD' } sub _expand_role_shortname { my ($self, @shortnames) = @_; @@ -694,6 +684,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 +780,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 +807,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