io-stream 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f0a5f918cac3b8ad0a5f88281f74f2ba71b1f37e3b0504bab234fc7139ae22c9
4
- data.tar.gz: ce06b6c063777952df3f6e911807e7377983e15450259d269d05d69ac8e073fa
3
+ metadata.gz: fe1cb88a44b5750ca8841631a3031da7ff06004e21d5dccf319012f0a0f1151f
4
+ data.tar.gz: 30d66da77b2887c16024511e907a8b30fdf1b24c53ee548f3a9171b54ff45ee1
5
5
  SHA512:
6
- metadata.gz: b74b95787f49071ba75c4b17ab6683b14fa24c2a83c8cc8b896cc4f23ba684ab0657b5dd0db7d6701b65e2da276619e6539a120918f079b23dbdef53b9bd6b93
7
- data.tar.gz: d254f93d0561271c7406f2a00269e53776ef6548ea1814b169fdee5dc661bed4230eefef734ceb463a0561f255e8c9c8c0f76bd20419213ac49cc18b11ccf7e0
6
+ metadata.gz: e2ad4475b779c7c421fb7143fac491243790e210c12dac89d37e885753353c78d1305bd08144e12204a13d4c068c7cf16a9133462fe0a5f19a5eecd49e839fc7
7
+ data.tar.gz: edef464bbf54fdfd662850aca4b7fcc522caca32566a2201b2ee8c68460c5eff9ae67d5e645e255b2e60ba951b88d10703648393e65c4f1b58f12ccffc8cd6cb
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
@@ -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.2"
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.2
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-01 00:00:00.000000000 Z
41
41
  dependencies: []
42
42
  description:
43
43
  email:
metadata.gz.sig CHANGED
Binary file