Feature #5778

Allow WEBrick::HTTPResponse to send IO-duck-typed bodies

Added by Alex Young over 2 years ago. Updated over 1 year ago.

[ruby-core:41725]
Status:Assigned
Priority:Normal
Assignee:Hiroshi Nakamura
Category:lib
Target version:next minor

Description

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.

httpresponse.patch Magnifier (2.76 KB) Alex Young, 12/20/2011 02:02 AM

History

#1 Updated by Yusuke Endoh about 2 years ago

  • Status changed from Open to Assigned
  • Assignee set to Yusuke Endoh

It is trivial, and the patch looks good to me.
I'll commit it unless there is objection.

Yusuke Endoh mame@tsg.ne.jp

#2 Updated by Hiroshi Nakamura about 2 years ago

Yusuke, you may want to assign it to me (maintainer)
I think it's good to improve, but not yet checked the patch...

#3 Updated by Yusuke Endoh about 2 years ago

  • Assignee changed from Yusuke Endoh to Hiroshi Nakamura

You have control.

Yusuke Endoh mame@tsg.ne.jp

#4 Updated by Yusuke Endoh over 1 year ago

  • Target version set to next minor

Blame NaHi!

Yusuke Endoh mame@tsg.ne.jp

Also available in: Atom PDF