class Fluent::Plugin::TailInput::TailWatcher::FIFO

Attributes

buffer[R]
encoding[R]
from_encoding[R]

Public Class Methods

new(from_encoding, encoding) click to toggle source
# File lib/fluent/plugin/in_tail.rb, line 578
def initialize(from_encoding, encoding)
  @from_encoding = from_encoding
  @encoding = encoding
  @buffer = ''.force_encoding(from_encoding)
  @eol = "\n".encode(from_encoding).freeze
end

Public Instance Methods

<<(chunk) click to toggle source
# File lib/fluent/plugin/in_tail.rb, line 587
def <<(chunk)
  # Although "chunk" is most likely transient besides String#force_encoding itself
  # won't affect the actual content of it, it is also probable that "chunk" is
  # a reused buffer and changing its encoding causes some problems on the caller side.
  #
  # Actually, the caller here is specific and "chunk" comes from IO#partial with
  # the second argument, which the function always returns as a return value.
  #
  # Feeding a string that has its encoding attribute set to any double-byte or
  # quad-byte encoding to IO#readpartial as the second arguments results in an
  # assertion failure on Ruby < 2.4.0 for unknown reasons.
  orig_encoding = chunk.encoding
  chunk.force_encoding(from_encoding)
  @buffer << chunk
  # Thus the encoding needs to be reverted back here
  chunk.force_encoding(orig_encoding)
end
bytesize() click to toggle source
# File lib/fluent/plugin/in_tail.rb, line 618
def bytesize
  @buffer.bytesize
end
convert(s) click to toggle source
# File lib/fluent/plugin/in_tail.rb, line 605
def convert(s)
  if @from_encoding == @encoding
    s
  else
    s.encode(@encoding, @from_encoding)
  end
end
next_line() click to toggle source
# File lib/fluent/plugin/in_tail.rb, line 613
def next_line
  idx = @buffer.index(@eol)
  convert(@buffer.slice!(0, idx + 1)) unless idx.nil?
end