File tree Expand file tree Collapse file tree 8 files changed +57
-0
lines changed
Expand file tree Collapse file tree 8 files changed +57
-0
lines changed Original file line number Diff line number Diff line change @@ -59,6 +59,8 @@ def finish
5959 # Ensure that future reads return nil, but allow for rewinding.
6060 def close ( error = nil )
6161 @index = @chunks . length
62+
63+ return nil
6264 end
6365
6466 def clear
@@ -90,6 +92,10 @@ def read
9092 end
9193 end
9294
95+ def discard
96+ self . close
97+ end
98+
9399 def write ( chunk )
94100 @chunks << chunk
95101 end
Original file line number Diff line number Diff line change @@ -133,6 +133,16 @@ def finish
133133 Buffered . read ( self )
134134 end
135135
136+ # Discard the body as efficiently as possible.
137+ #
138+ # The default implementation simply reads all chunks until the body is empty.
139+ #
140+ # Useful for discarding the body when it is not needed, but preserving the underlying connection.
141+ def discard
142+ while chunk = self . read
143+ end
144+ end
145+
136146 def as_json ( ...)
137147 {
138148 class : self . class . name ,
Original file line number Diff line number Diff line change @@ -40,6 +40,14 @@ def finish
4040 end
4141 end
4242
43+ # Discard the body as efficiently as possible.
44+ def discard
45+ if body = @body
46+ @body = nil
47+ body . discard
48+ end
49+ end
50+
4351 # Buffer the entire request/response body.
4452 # @returns [Reader] itself.
4553 def buffered!
Original file line number Diff line number Diff line change @@ -59,6 +59,10 @@ def read
5959 @body . read
6060 end
6161
62+ def discard
63+ @body . discard
64+ end
65+
6266 def as_json ( ...)
6367 {
6468 class : self . class . name ,
Original file line number Diff line number Diff line change 175175 expect ( body . inspect ) . to be =~ /\d + chunks, \d + bytes/
176176 end
177177 end
178+
179+ with "#discard" do
180+ it "closes the body" do
181+ expect ( body ) . to receive ( :close )
182+
183+ expect ( body . discard ) . to be == nil
184+ end
185+ end
178186end
Original file line number Diff line number Diff line change 5858 end
5959 end
6060
61+ with "#discard" do
62+ it "should read all chunks" do
63+ expect ( body ) . to receive ( :read ) . and_return ( nil )
64+ expect ( body . discard ) . to be_nil
65+ end
66+ end
67+
6168 with "#as_json" do
6269 it "generates a JSON representation" do
6370 expect ( body . as_json ) . to have_keys (
Original file line number Diff line number Diff line change @@ -29,6 +29,13 @@ def initialize(body)
2929 end
3030 end
3131
32+ with "#discard" do
33+ it 'discards the body' do
34+ expect ( body ) . to receive ( :discard )
35+ expect ( reader . discard ) . to be_nil
36+ end
37+ end
38+
3239 with '#buffered!' do
3340 it 'buffers the body' do
3441 expect ( reader . buffered! ) . to be_equal ( reader )
Original file line number Diff line number Diff line change 104104 body . call ( stream )
105105 end
106106 end
107+
108+ with "#discard" do
109+ it "should proxy discard" do
110+ expect ( source ) . to receive ( :discard ) . and_return ( nil )
111+ expect ( body . discard ) . to be_nil
112+ end
113+ end
107114end
You can’t perform that action at this time.
0 commit comments