use Moose::Role;
-requires 'match', 'match_captures';
+requires 'match', 'match_captures', 'list_extra_info';
has allowed_content_types => (
is=>'ro',
required=>1,
lazy=>1,
isa=>'ArrayRef',
- auto_deref=>1,
builder=>'_build_allowed_content_types');
has normalized => (
sub _build_allowed_content_types {
my $self = shift;
- my @proto = split ',', @{$self->attributes->{Consumes}};
- return map {
+ my @proto = map {split ',', $_ } @{$self->attributes->{Consumes}};
+ my @converted = map {
if(my $normalized = $self->normalized->{$_}) {
ref $normalized ? @$normalized : ($normalized);
} else {
$_;
}
} @proto;
+
+ return \@converted;
}
around ['match','match_captures'] => sub {
sub can_consume {
my ($self, $request_content_type) = @_;
my @matches = grep { lc($_) eq lc($request_content_type) }
- $self->allowed_content_types;
+ @{$self->allowed_content_types};
return @matches ? 1:0;
}
+around 'list_extra_info' => sub {
+ my ($orig, $self, @args) = @_;
+ return {
+ %{ $self->$orig(@args) },
+ CONSUMES => $self->allowed_content_types,
+ };
+};
+
1;
=head1 NAME
## Alternatively, for common types...
sub is_json : Chained('start') Consume(JSON) { ... }
- sub is_urlencoded : Chained('start') Consume(HTMLForm)URLEncoded { ... }
- sub is_multipart : Chained('start') ConsumeFormData { ... }
+ sub is_urlencoded : Chained('start') Consumes(UrlEncoded) { ... }
+ sub is_multipart : Chained('start') Consumes(Multipart) { ... }
## Or allow more than one type
Boolean. Does the current request match content type with what this actionrole
can consume?
+=head2 list_extra_info
+
+Add the accepted content type to the debug screen.
+
=head1 AUTHORS
Catalyst Contributors, see Catalyst.pm