class WebConsole::Injector
Injects content into a Rack body.
def initialize(body, headers)
def initialize(body, headers) @body = "".dup body.each { |part| @body << part } body.close if body.respond_to?(:close) @headers = headers end
def inject(content)
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["Content-Length"] @headers["Content-Length"] = (@body.bytesize + content.bytesize).to_s end [ if position = @body.rindex("</body>") [ @body.insert(position, content) ] else [ @body << content ] end, @headers ] end