Feature #20105
closedIntroduce `IO::Stream` or something similar.
Description
Ruby's IO class has a general model for streaming IO, including some hidden classes like IO::generic_readable and IO::generic_writable.
As Ruby's core IO classes evolve, gems like openssl (see OpenSSL::Buffering) need to be updated to support changes to the interface.
As it stands, there are changes in IO which are not copied to OpenSSL::Buffering. I'd like to propose we introduce some shared interface for streams that is used by IO, Socket, and OpenSSL to start with. The general interface would be similar to IO and allow code like OpenSSL to avoid re-implementing the IO interface.
I don't have a strong idea for the interface yet, but it would probably look something like this:
class IO::Stream
def initialize(io, buffered: true)
end
def read(size, buffer=nil)
end
def write(size, buffer=nil)
end
# Include general operations from IO, like gets, puts, etc
end
I think ideally we'd try implement with pure Ruby and a first goal would be to replace OpenSSL::Buffering.
Updated by ioquatix (Samuel Williams) almost 2 years ago
- Description updated (diff)
Updated by ioquatix (Samuel Williams) almost 2 years ago
- Description updated (diff)
Updated by ioquatix (Samuel Williams) almost 2 years ago
- Description updated (diff)
Updated by jeremyevans0 (Jeremy Evans) almost 2 years ago
- Tracker changed from Bug to Feature
- Backport deleted (
3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN)
Updated by hsbt (Hiroshi SHIBATA) over 1 year ago
- Status changed from Open to Assigned
Updated by ioquatix (Samuel Williams) 5 months ago
- Status changed from Assigned to Closed
In the end, I created a gem for this. I'm okay with using a gem.
Updated by javanthropus (Jeremy Bopp) 5 months ago
I'm not sure if it meets your needs, but I just released an update to the io-like gem that brings it into the Ruby 3.x age. It uses primitive IO functions as a base and implements virtually all of the IO class functionality in pure Ruby. Please take a look.