io-stream 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f0a5f918cac3b8ad0a5f88281f74f2ba71b1f37e3b0504bab234fc7139ae22c9
4
- data.tar.gz: ce06b6c063777952df3f6e911807e7377983e15450259d269d05d69ac8e073fa
3
+ metadata.gz: 6e86dd2d0db65582e6b9655493776e1f3fa16c8d22af92d40c7c2f1ae374c7ee
4
+ data.tar.gz: e6299a23d03c263361f04bae8ec29c3d0b70c2f19d6cdfe64ff601d6b7bb7c64
5
5
  SHA512:
6
- metadata.gz: b74b95787f49071ba75c4b17ab6683b14fa24c2a83c8cc8b896cc4f23ba684ab0657b5dd0db7d6701b65e2da276619e6539a120918f079b23dbdef53b9bd6b93
7
- data.tar.gz: d254f93d0561271c7406f2a00269e53776ef6548ea1814b169fdee5dc661bed4230eefef734ceb463a0561f255e8c9c8c0f76bd20419213ac49cc18b11ccf7e0
6
+ metadata.gz: 16d2aff35b208b029c2b917cd6a423d5ee54547939a39e5575f2641d8060b793a03a5a0903a885216142d99369ba80f8941d35ab07739a11c95d2c98dfa1d3cd
7
+ data.tar.gz: af90134348a217f72fe90dea4cab0c2c4e7fc6b7a2c27345b865642191c9aa0bdda16b2e1856114d1e42bbf7f9c6be7bb506daa8cb9724baae2fdf1534dcc85e
checksums.yaml.gz.sig CHANGED
Binary file
@@ -22,7 +22,7 @@ module IO::Stream
22
22
  def self.wrap(io, **options)
23
23
  if io.respond_to?(:buffered=)
24
24
  io.buffered = false
25
- else
25
+ elsif io.respond_to?(:sync=)
26
26
  io.sync = true
27
27
  end
28
28
 
@@ -29,7 +29,6 @@ module IO::Stream
29
29
 
30
30
  @read_buffer = StringBuffer.new
31
31
  @write_buffer = StringBuffer.new
32
- @drain_buffer = StringBuffer.new
33
32
 
34
33
  # Used as destination buffer for underlying reads.
35
34
  @input_buffer = StringBuffer.new
@@ -129,20 +128,21 @@ module IO::Stream
129
128
  read_until(separator, **options)
130
129
  end
131
130
 
131
+ private def drain(buffer)
132
+ begin
133
+ syswrite(buffer)
134
+ ensure
135
+ # If the write operation fails, we still need to clear this buffer, and the data is essentially lost.
136
+ buffer.clear
137
+ end
138
+ end
139
+
132
140
  # Flushes buffered data to the stream.
133
141
  def flush
134
142
  return if @write_buffer.empty?
135
143
 
136
144
  @writing.synchronize do
137
- # Flip the write buffer and drain buffer:
138
- @write_buffer, @drain_buffer = @drain_buffer, @write_buffer
139
-
140
- begin
141
- syswrite(@drain_buffer)
142
- ensure
143
- # If the write operation fails, we still need to clear this buffer, and the data is essentially lost.
144
- @drain_buffer.clear
145
- end
145
+ self.drain(@write_buffer)
146
146
  end
147
147
  end
148
148
 
@@ -150,11 +150,15 @@ module IO::Stream
150
150
  # buffer is flushed to the underlying `io`.
151
151
  # @param string the string to write to the buffer.
152
152
  # @return the number of bytes appended to the buffer.
153
- def write(string)
154
- @write_buffer << string
155
-
156
- if @write_buffer.bytesize >= @block_size
157
- flush
153
+ def write(string, flush: false)
154
+ @writing.synchronize do
155
+ @write_buffer << string
156
+
157
+ flush |= (@write_buffer.bytesize >= @block_size)
158
+
159
+ if flush
160
+ self.drain(@write_buffer)
161
+ end
158
162
  end
159
163
 
160
164
  return string.bytesize
@@ -168,11 +172,15 @@ module IO::Stream
168
172
  end
169
173
 
170
174
  def puts(*arguments, separator: $/)
171
- arguments.each do |argument|
172
- @write_buffer << argument << separator
173
- end
175
+ return if arguments.empty?
174
176
 
175
- flush
177
+ @writing.synchronize do
178
+ arguments.each do |argument|
179
+ @write_buffer << argument << separator
180
+ end
181
+
182
+ self.drain(@write_buffer)
183
+ end
176
184
  end
177
185
 
178
186
  def closed?
@@ -266,13 +274,13 @@ module IO::Stream
266
274
 
267
275
  if @read_buffer.empty?
268
276
  if sysread(size, @read_buffer)
269
- # Console.logger.debug(self, name: "read") {@read_buffer.inspect}
277
+ # Console.info(self, name: "read") {@read_buffer.inspect}
270
278
  return true
271
279
  end
272
280
  else
273
281
  if chunk = sysread(size, @input_buffer)
274
282
  @read_buffer << chunk
275
- # Console.logger.debug(self, name: "read") {@read_buffer.inspect}
283
+ # Console.info(self, name: "read") {@read_buffer.inspect}
276
284
 
277
285
  return true
278
286
  end
@@ -43,6 +43,18 @@ module OpenSSL
43
43
  to_io.timeout = value
44
44
  end
45
45
  end
46
+
47
+ unless method_defined?(:buffered?)
48
+ def buffered?
49
+ return to_io.buffered?
50
+ end
51
+ end
52
+
53
+ unless method_defined?(:buffered=)
54
+ def buffered=(value)
55
+ to_io.buffered = value
56
+ end
57
+ end
46
58
  end
47
59
  end
48
60
  end
@@ -4,5 +4,5 @@
4
4
  # Copyright, 2023-2024, by Samuel Williams.
5
5
 
6
6
  module IO::Stream
7
- VERSION = "0.4.1"
7
+ VERSION = "0.4.3"
8
8
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: io-stream
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -37,7 +37,7 @@ cert_chain:
37
37
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
38
38
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
39
39
  -----END CERTIFICATE-----
40
- date: 2024-09-11 00:00:00.000000000 Z
40
+ date: 2024-10-02 00:00:00.000000000 Z
41
41
  dependencies: []
42
42
  description:
43
43
  email:
metadata.gz.sig CHANGED
Binary file