34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/async/http/cache/body.rb', line 34
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(TRAILERS, ETAG)
end
::Protocol::HTTP::Body::Completable.wrap(response) do |error|
if error
Async.logger.error(self) {error}
else
yield response, rewindable.buffered
end
end
end
else
yield response, nil
end
return response
end
|