X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FRequest.pm;h=fc13ca99353cafb81f32c9bc05f7f0be1a2705ca;hb=edb20ed3aaf578b6784f7e0a52ed8c00f05f2718;hp=ece1dc82753b2bdf5080aa46708b6033f76df0ef;hpb=5c6a56e09f6db1abf49a6fead8238a38d52c59e8;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index ece1dc8..fc13ca9 100644 --- a/lib/Catalyst/Request.pm +++ b/lib/Catalyst/Request.pm @@ -10,6 +10,8 @@ use HTTP::Headers; use Moose; +with 'MooseX::Emulate::Class::Accessor::Fast'; + has action => (is => 'rw'); has address => (is => 'rw'); has arguments => (is => 'rw', default => sub { [] }); @@ -21,7 +23,7 @@ has protocol => (is => 'rw'); has query_parameters => (is => 'rw', default => sub { {} }); has secure => (is => 'rw', default => 0); has captures => (is => 'rw', default => sub { [] }); -has uri => (is => 'rw'); +has uri => (is => 'rw', predicate => 'has_uri'); has user => (is => 'rw'); has headers => ( is => 'rw', @@ -32,16 +34,19 @@ has headers => ( lazy => 1, ); -#Moose ToDo: -#can we lose the before modifiers which just call prepare_body ? -#they are wasteful, slow us down and feel cluttery. +# Moose TODO: +# - Can we lose the before modifiers which just call prepare_body ? +# they are wasteful, slow us down and feel cluttery. # Can we call prepare_body at BUILD time? -# Can we make _body an attribute and have the rest of these lazy build from there? +# Can we make _body an attribute, have the rest of +# these lazy build from there and kill all the direct hash access +# in Catalyst.pm and Engine.pm? has _context => ( is => 'rw', weak_ref => 1, handles => ['read'], + clearer => '_clear_context', ); has body_parameters => ( @@ -59,16 +64,9 @@ before body_parameters => sub { has uploads => ( is => 'rw', required => 1, - lazy => 1, default => sub { {} }, ); -# modifier was a noop (groditi) -# before uploads => sub { -# my ($self) = @_; -# #$self->_context->prepare_body; -# }; - has parameters => ( is => 'rw', required => 1, @@ -78,7 +76,6 @@ has parameters => ( before parameters => sub { my ($self, $params) = @_; - #$self->_context->prepare_body(); if ( $params && !ref $params ) { $self->_context->log->warn( "Attempt to retrieve '$params' with req->params(), " . @@ -94,18 +91,21 @@ has base => ( lazy => 1, default => sub { my $self = shift; - return $self->path if $self->uri; + return $self->path if $self->has_uri; }, ); -has body => ( - is => 'rw' +has _body => ( + is => 'rw', clearer => '_clear_body', predicate => '_has_body', ); - -before body => sub { - my ($self) = @_; +# Eugh, ugly. Should just be able to rename accessor methods to 'body' +# and provide a custom reader.. +sub body { + my $self = shift; $self->_context->prepare_body(); -}; + $self->_body(@_) if scalar @_; + return blessed $self->_body ? $self->_body->body : $self->_body; +} has hostname => ( is => 'rw', @@ -113,10 +113,12 @@ has hostname => ( lazy => 1, default => sub { my ($self) = @_; - gethostbyaddr( inet_aton( $self->address ), AF_INET ) + gethostbyaddr( inet_aton( $self->address ), AF_INET ) || 'localhost' }, ); +has _path => ( is => 'rw', predicate => '_has_path', clearer => '_clear_path' ); + no Moose; sub args { shift->arguments(@_) } @@ -406,17 +408,17 @@ sub path { if (@params) { $self->uri->path(@params); - undef $self->{path}; + $self->_clear_path; } - elsif ( defined( my $path = $self->{path} ) ) { - return $path; + elsif ( $self->_has_path ) { + return $self->_path; } else { my $path = $self->uri->path; my $location = $self->base->path; $path =~ s/^(\Q$location\E)?//; $path =~ s/^\///; - $self->{path} = $path; + $self->_path($path); return $path; }