class Paquito::CommentPrefixVersion

Constants

DEFAULT_VERSION
HEADER_SLICE
PAYLOAD_SLICE
PREFIX
SUFFIX
VERSION_POSITION

Public Class Methods

new(current_version, coders) click to toggle source
# File lib/paquito/comment_prefix_version.rb, line 13
def initialize(current_version, coders)
  unless (0..9).cover?(current_version) && coders.keys.all? { |version| (0..9).cover?(version) }
    raise ArgumentError, "CommentPrefixVersion versions must be between 0 and 9"
  end

  @current_version = current_version
  @coders = coders.transform_values { |c| Paquito.cast(c) }.freeze
  @current_coder = coders.fetch(current_version)
end

Public Instance Methods

dump(object) click to toggle source
# File lib/paquito/comment_prefix_version.rb, line 23
def dump(object)
  prefix = +"#{PREFIX}#{@current_version}#{SUFFIX}"
  payload = @current_coder.dump(object)
  if payload.encoding == Encoding::BINARY
    prefix.b << payload
  else
    prefix << payload
  end
end
load(payload) click to toggle source
# File lib/paquito/comment_prefix_version.rb, line 33
def load(payload)
  payload_version, serial = extract_version(payload)

  coder = @coders.fetch(payload_version) do
    raise UnsupportedCodec, "Unsupported packer version #{payload_version}"
  end
  coder.load(serial)
end

Private Instance Methods

extract_version(serial) click to toggle source
# File lib/paquito/comment_prefix_version.rb, line 44
def extract_version(serial)
  header = serial.byteslice(HEADER_SLICE)&.force_encoding(Encoding::UTF_8)
  unless header.start_with?(PREFIX) && header.end_with?(SUFFIX)
    return [DEFAULT_VERSION, serial]
  end

  version = header.getbyte(VERSION_POSITION) - 48 # ASCII byte to number
  [version, serial.byteslice(PAYLOAD_SLICE) || ""]
end