Changeset 13408
- Timestamp:
- 06/07/08 20:59:54 (5 years ago)
- Location:
- lang/perl/HTTP-Engine/branches/lazy_request
- Files:
-
- 3 modified
-
lib/HTTP/Engine/Request.pm (modified) (2 diffs)
-
lib/HTTP/Engine/RequestBuilder.pm (modified) (3 diffs)
-
t/10_request_builder.t (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/HTTP-Engine/branches/lazy_request/lib/HTTP/Engine/Request.pm
r13407 r13408 147 147 } 148 148 149 has "_http_body" => ( 150 is => "rw", 151 lazy_build => 1, 152 ); 153 154 sub _build__http_body { 155 my $self = shift; 156 $self->request_builder->_build_initial_http_body($self); 157 } 158 149 159 has http_body => ( 150 160 is => 'rw', … … 159 169 sub _build_http_body { 160 170 my $self = shift; 161 $self-> _build_171 $self->request_builder->_build_full_http_body($self); 162 172 } 163 173 -
lang/perl/HTTP-Engine/branches/lazy_request/lib/HTTP/Engine/RequestBuilder.pm
r13407 r13408 27 27 28 28 no Moose; 29 30 sub prepare {31 my ($self, $context) = @_;32 33 # init.34 delete $self->{_prepared_read};35 36 # do build.37 for my $method (qw( body uploads )) {38 my $method = "_prepare_$method";39 $self->$method($context);40 }41 }42 29 43 30 sub _build_connection_info { … … 108 95 } 109 96 110 sub _prepare_body { 111 my($self, $c) = @_; 112 113 my $req = $c->req; 97 sub _build_initial_http_body { 98 my($self, $req) = @_; 114 99 115 100 # TODO: catalyst のように prepare フェーズで処理せず、遅延評価できるようにする 116 $self->read_length($req->header('Content-Length') || 0);101 my $length = $req->header('Content-Length') || 0; 117 102 my $type = $req->header('Content-Type'); 118 103 119 $req->http_body( HTTP::Body->new($type, $self->read_length) ); 120 $req->http_body->{tmpdir} = $self->upload_tmp if $self->upload_tmp; 121 122 $self->_read_to_end($c); 104 my $body = HTTP::Body->new($type, $length); 105 $body->{tmpdir} = $self->upload_tmp if $self->upload_tmp; 106 107 return { 108 read_length => $length, 109 body => $body, 110 }; 111 } 112 113 sub _build_full_http_body { 114 my ( $self, $req ) = @_; 115 $self->_read_to_end($req); 116 return $req->_http_body->{body}; 117 } 118 119 sub _build_raw_body { 120 my ( $self, $req ) = @_; 121 $self->_read_to_end($req); 122 return $req->_raw_body; 123 123 } 124 124 125 125 sub _read_to_end { 126 my ( $self, $ c) = @_;127 128 if ($ self->read_length> 0) {129 $self->_read_all($ c);126 my ( $self, $req ) = @_; 127 128 if ($req->_http_body->{read_length} > 0) { 129 $self->_read_all($req); 130 130 131 131 # paranoia against wrong Content-Length header … … 139 139 140 140 sub _read_all { 141 my ( $self, $ c) = @_;141 my ( $self, $req ) = @_; 142 142 143 143 while (my $buffer = $self->_read) { 144 $self->_prepare_body_chunk($ c, $buffer);144 $self->_prepare_body_chunk($req, $buffer); 145 145 } 146 146 } 147 147 148 148 sub _prepare_body_chunk { 149 my($self, $c, $chunk) = @_; 150 151 my $req = $c->req; 152 153 $req->_raw_body($req->raw_body . $chunk); 154 155 $req->http_body->add($chunk); 149 my($self, $req, $chunk) = @_; 150 151 $req->_raw_body($req->_raw_body . $chunk); 152 $req->_http_body->{body}->add($chunk); 156 153 } 157 154 -
lang/perl/HTTP-Engine/branches/lazy_request/t/10_request_builder.t
r13365 r13408 2 2 use YAML (); 3 3 use HTTP::Engine::Context; 4 use HTTP::Engine::Request; 4 5 use HTTP::Engine::RequestBuilder; 5 6 use IO::Scalar; 6 7 7 8 plan tests => 8; 8 9 can_ok(10 'HTTP::Engine::RequestBuilder' => 'prepare'11 );12 9 13 10 filters { … … 21 18 22 19 local %ENV = %{ $block->env }; 23 my $c = HTTP::Engine::Context->new();24 20 25 21 tie *STDIN, 'IO::Scalar', \( $block->body ); 26 $builder->prepare($c); 22 23 my $c = HTTP::Engine::Context->new( 24 req => HTTP::Engine::Request->new( request_builder => $builder ), 25 ); 26 27 eval $block->test; 28 27 29 untie *STDIN; 28 30 29 eval $block->test;30 31 die $@ if $@; 31 32 };
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)