Method: IO::LikeHelpers::CharacterIO#write

Defined in:
lib/io/like_helpers/character_io.rb

#write(buffer) ⇒ Integer

Writes characters to the stream, performing character and newline conversion first if necessary.

This method always blocks until all data is written.

Parameters:

  • buffer (String)

    the characters to write

Returns:

  • (Integer)

    the number of bytes written, after conversion

Raises:

  • (IOError)

    if the stream is not writable



317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
# File 'lib/io/like_helpers/character_io.rb', line 317

def write(buffer)
  assert_writable

  target_encoding = external_encoding
  if target_encoding.nil? || target_encoding == Encoding::BINARY
    target_encoding = buffer.encoding
  end
  if target_encoding != buffer.encoding || ! encoding_opts_w.empty?
    buffer = buffer.encode(target_encoding, **encoding_opts_w)
  end

  writer = sync? ? blocking_io : buffered_io
  buffer = buffer.b
  bytes_written = 0
  while bytes_written < buffer.bytesize do
    bytes_written += writer.write(buffer[bytes_written..-1])
  end
  bytes_written
end