X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FTraitFor%2FRequest%2FREST.pm;h=4a1f0d0289662a3748ec45fbfa4a7d4f26efaa12;hb=refs%2Ftags%2F1.08;hp=36be057d4e81fdb510fd7174fba7cba4d95b32c0;hpb=38e05ec40d124a14cee7ba0503f918a40a8ac5e1;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/TraitFor/Request/REST.pm b/lib/Catalyst/TraitFor/Request/REST.pm index 36be057..4a1f0d0 100644 --- a/lib/Catalyst/TraitFor/Request/REST.pm +++ b/lib/Catalyst/TraitFor/Request/REST.pm @@ -3,13 +3,30 @@ use Moose::Role; use HTTP::Headers::Util qw(split_header_words); use namespace::autoclean; +our $VERSION = '1.08'; +$VERSION = eval $VERSION; + has [qw/ data accept_only /] => ( is => 'rw' ); -sub accepted_content_types { +has accepted_content_types => ( + is => 'ro', + isa => 'ArrayRef', + lazy => 1, + builder => '_build_accepted_content_types', + init_arg => undef, +); + +has preferred_content_type => ( + is => 'ro', + isa => 'Str', + lazy => 1, + builder => '_build_preferred_content_type', + init_arg => undef, +); + +sub _build_accepted_content_types { my $self = shift; - return $self->{content_types} if $self->{content_types}; - my %types; # First, we use the content type in the HTTP Request. It wins all. @@ -49,11 +66,10 @@ sub accepted_content_types { } } - return $self->{content_types} = - [ sort { $types{$b} <=> $types{$a} } keys %types ]; + [ sort { $types{$b} <=> $types{$a} } keys %types ]; } -sub preferred_content_type { $_[0]->accepted_content_types->[0] } +sub _build_preferred_content_type { $_[0]->accepted_content_types->[0] } sub accepts { my $self = shift; @@ -80,7 +96,7 @@ Catalyst::TraitFor::Request::REST - A role to apply to Catalyst::Request giving =head1 DESCRIPTION This is a L applied to L that adds a few -methods to the request object to faciliate writing REST-y code. +methods to the request object to facilitate writing REST-y code. Currently, these methods are all related to the content types accepted by the client.