class Paquito::Types::CustomTypesRegistry

Public Class Methods

packer(value) click to toggle source
# File lib/paquito/types.rb, line 21
def packer(value)
  packers.fetch(klass = value.class) do
    if packable?(value) && unpackable?(klass)
      @packers[klass] = SERIALIZE_PROC
    end
  end
end
register(klass, packer: nil, unpacker:) click to toggle source
# File lib/paquito/types.rb, line 37
def register(klass, packer: nil, unpacker:)
  if packer
    raise ArgumentError, "packer for #{klass} already defined" if packers.key?(klass)

    packers[klass] = packer
  end

  raise ArgumentError, "unpacker for #{klass} already defined" if unpackers.key?(klass)

  unpackers[klass] = unpacker

  self
end
unpacker(klass) click to toggle source
# File lib/paquito/types.rb, line 29
def unpacker(klass)
  unpackers.fetch(klass) do
    if unpackable?(klass)
      @unpackers[klass] = klass.method(DESERIALIZE_METHOD).to_proc
    end
  end
end

Private Class Methods

packable?(value) click to toggle source
# File lib/paquito/types.rb, line 53
def packable?(value)
  value.class.method_defined?(SERIALIZE_METHOD) ||
    raise(PackError.new("#{value.class} is not serializable", value))
end
packers() click to toggle source
# File lib/paquito/types.rb, line 63
def packers
  @packers ||= {}
end
unpackable?(klass) click to toggle source
# File lib/paquito/types.rb, line 58
def unpackable?(klass)
  klass.respond_to?(DESERIALIZE_METHOD) ||
    raise(UnpackError, "#{klass} is not deserializable")
end
unpackers() click to toggle source
# File lib/paquito/types.rb, line 67
def unpackers
  @unpackers ||= {}
end