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