Skip to content

Commit 7480455

Browse files
committed
read without size always returns a String.
1 parent 968ba48 commit 7480455

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

lib/io/stream/readable.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,17 @@ def read(size = nil, buffer = nil)
8383
until @done
8484
fill_read_buffer
8585
end
86+
87+
if buffer
88+
buffer.replace(@read_buffer)
89+
@read_buffer.clear
90+
else
91+
buffer = @read_buffer
92+
@read_buffer = StringBuffer.new
93+
end
94+
95+
# Read without size always returns a non-nil value, even if it is an empty string.
96+
return buffer
8697
end
8798

8899
return consume_read_buffer(size, buffer)

releases.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Releases
22

3+
## Unreleased
4+
5+
- Fix EOF behavior to match Ruby IO semantics: `read()` returns empty string `""` at EOF while `read(size)` returns `nil` at EOF.
6+
37
## v0.9.0
48

59
- Add support for `buffer` parameter in `read`, `read_exactly`, and `read_partial` methods to allow reading into a provided buffer.

test/io/stream/buffered.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ def before
714714
with "#close" do
715715
it "should close the stream" do
716716
server.close
717-
expect(client.read).to be_nil
717+
expect(client.read).to be == ""
718718

719719
expect(server.closed?).to be_truthy
720720
expect(client.closed?).to be_falsey

0 commit comments

Comments
 (0)