1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
# frozen_string_literal: true
module WebConsole
# Injects content into a Rack body.
class Injector
def initialize(body, headers)
@body = "".dup
body.each { |part| @body << part }
body.close if body.respond_to?(:close)
@headers = headers
end
def inject(content)
# Set content-length header to the size of the current body
# + the extra content. Otherwise the response will be truncated.
if @headers[Rack::CONTENT_LENGTH]
@headers[Rack::CONTENT_LENGTH] = (@body.bytesize + content.bytesize).to_s
end
[
if position = @body.rindex("</body>")
[ @body.insert(position, content) ]
else
[ @body << content ]
end,
@headers
]
end
end
end
|