Sha256: e9fb26d92aedbef8610c7b36526ef256b526f618fdf936063a2e767368b740f7

Contents?: true

Size: 801 Bytes

Versions: 1

Compression:

Stored size: 801 Bytes

Contents

class Nodectl::Stream::Buffer
  def initialize
    @buffer = ""
    @valid  = ""
  end

  def <<(string)
    string  = @buffer + string
    @buffer = ""
    @buffer.force_encoding(Encoding::ASCII_8BIT)

    string.force_encoding(Encoding::UTF_8)

    16.times do
      if string.valid_encoding?
        break
      end

      string, byte = byte_rotate(string)
      @buffer << byte
    end
    
    if string.valid_encoding?
      @valid << string
    else
      Nodectl.logger.error("buffer: cannot convert string to valid UTF-8, ignore it")
    end
  end

  def read
    ret = @valid
    @valid = ""
    ret
  end

  private

  def byte_rotate(string)
    byte   = string.byteslice(-1)
    string = string.byteslice(0...-1)
    byte.force_encoding(Encoding::ASCII_8BIT)
    [string, byte]
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nodectl-0.2.4 lib/nodectl/stream/buffer.rb