Allow WEBrick::HTTPResponse to send IO-duck-typed bodies
WEBrick::HTTPResponse currently type-checks for IO to determine how to transfer content to the outgoing socket. Because of this, it's not possible to use "IO-like" objects as data sources unless they specifically inherit from IO.
The interface HTTPResponse requires from its body objects is very simple: it only calls #read and #close, and optionally #bytesize. This means that the type-check is needlessly strict, and prevents custom objects from being used as data sources. The attached patch removes the type-check on IO, allowing duck-typed objects to be used.
The downside to this patch is that you can't pass in objects that duck-type to String's interface. It wouldn't be hard to remove that restriction if necessary, but I figured this was the less intrusive approach.
Updated by normalperson (Eric Wong) over 4 years ago
@normalperson (Eric Wong), could you handle this ticket?