Merge branch 'hamburg'
John Napiorkowski [Tue, 5 Nov 2013 21:30:59 +0000 (15:30 -0600)]
1  2 
lib/Catalyst/Controller.pm
lib/Catalyst/Plugin/Unicode/Encoding.pm

@@@ -120,7 -120,7 +120,7 @@@ for more info about how Catalyst dispat
  =cut
  
  #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
+ #to be class data. i think that attributes +default would work just fine
  __PACKAGE__->mk_classdata($_) for qw/_dispatch_steps _action_class _action_role_prefix/;
  
  __PACKAGE__->_dispatch_steps( [qw/_BEGIN _AUTO _ACTION/] );
@@@ -368,7 -368,11 +368,11 @@@ sub gather_default_action_roles 
    my @roles = ();
    push @roles, 'Catalyst::ActionRole::HTTPMethods'
      if $args{attributes}->{Method};
-   return @roles;
+   push @roles, 'Catalyst::ActionRole::ConsumesContent'
+     if $args{attributes}->{Consumes};
+     return @roles;
  }
  
  sub _parse_attrs {
@@@ -708,7 -712,7 +712,7 @@@ similar to how annotations work in othe
  Generally L<Catalyst> uses these to influence how the dispatcher sees your
  action and when it will run it in response to an incoming request.  They can
  also be used for other things.  Here's a summary, but you should refer to the
 -liked manual page for additional help.
 +linked manual page for additional help.
  
  =head2 Global
  
@@@ -830,6 -834,61 +834,61 @@@ When used with L</Path> indicates the n
  the path.  However if no Args value is set, assumed to 'slurp' all
  remaining path pars under this namespace.
  
+ =head2 Consumes('...')
+ Matches the current action against the content-type of the request.  Typically
+ this is used when the request is a POST or PUT and you want to restrict the
+ submitted content type.  For example, you might have an HTML for that either
+ returns classic url encoded form data, or JSON when Javascript is enabled.  In
+ this case you may wish to match either incoming type to one of two different
+ actions, for properly processing.
+ Examples:
+     sub is_json       : Chained('start') Consumes('application/json') { ... }
+     sub is_urlencoded : Chained('start') Consumes('application/x-www-form-urlencoded') { ... }
+     sub is_multipart  : Chained('start') Consumes('multipart/form-data') { ... }
+ To reduce boilerplate, we include the following content type shortcuts:
+ Examples
+       sub is_json       : Chained('start') Consume(JSON) { ... }
+       sub is_urlencoded : Chained('start') Consumes(UrlEncoded) { ... }
+       sub is_multipart  : Chained('start') Consumes(Multipart) { ... }
+ You may specify more than one match:
+       sub is_more_than_one
+         : Chained('start')
+         : Consumes('application/x-www-form-urlencoded')
+         : Consumes('multipart/form-data')
+       sub is_more_than_one
+         : Chained('start')
+         : Consumes(UrlEncoded)
+         : Consumes(Multipart)
+ Since it is a common case the shortcut C<HTMLForm> matches both
+ 'application/x-www-form-urlencoded' and 'multipart/form-data'.  Here's the full
+ list of available shortcuts:
+     JSON => 'application/json',
+     JS => 'application/javascript',
+     PERL => 'application/perl',
+     HTML => 'text/html',
+     XML => 'text/XML',
+     Plain => 'text/plain',
+     UrlEncoded => 'application/x-www-form-urlencoded',
+     Multipart => 'multipart/form-data',
+     HTMLForm => ['application/x-www-form-urlencoded','multipart/form-data'],
+ Please keep in mind that when dispatching, L<Catalyst> will match the first most
+ relevant case, so if you use the C<Consumes> attribute, you should place your
+ most accurate matches early in the Chain, and your 'catchall' actions last.
+ See L<Catalyst::ActionRole::ConsumesContent> for more.
  =head1 OPTIONAL METHODS
  
  =head2 _parse_[$name]_attr
@@@ -130,12 -130,12 +130,12 @@@ sub setup 
  
      my $conf = $self->config;
  
-     # Allow an explict undef encoding to disable default of utf-8
+     # Allow an explicit undef encoding to disable default of utf-8
      my $enc = delete $conf->{encoding};
      $self->encoding( $enc );
  
      return $self->next::method(@_)
-       unless $self->setup_finished; ## hack to stop possibily meaningless test fail... (jnap)
+       unless $self->setup_finished; ## hack to stop possibly meaningless test fail... (jnap)
  }
  
  sub _handle_unicode_decoding {
@@@ -201,7 -201,7 +201,7 @@@ Catalyst::Plugin::Unicode::Encoding - U
  
  This plugin is automatically loaded by apps. Even though is not a core component
  yet, it will vanish as soon as the code is fully integrated. For more
 -information, please refer to C<ENCODING> section at L<Catalyst>.
 +information, please refer to L<Catalyst/ENCODING>.
  
  =head1 AUTHORS