20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/async/http/cache/body.rb', line 20
def self.wrap(response, &block)
if body = response.body
if body.empty?
yield response, body
else
rewindable = ::Protocol::HTTP::Body::Rewindable.wrap(response)
unless response..include?(ETAG)
::Protocol::HTTP::Body::Digestable.wrap(response) do |wrapper|
response..add(ETAG, wrapper.etag)
end
response..add(TRAILER, ETAG)
end
::Protocol::HTTP::Body::Completable.wrap(response) do |error|
if error
Console::Event::Failure.for(error).emit(self)
else
yield response, rewindable.buffered
end
end
end
else
yield response, nil
end
return response
end
|