module Multibases

Constants

Encoded
IMPLEMENTATIONS

rubocop:disable Style/MutableConstant

Registration

rubocop:enable Style/MutableConstant

VERSION

Public Instance Methods

[](entry) click to toggle source
# File lib/multibases/registry.rb, line 26
def [](entry)
  find_by(code: entry, encoding: entry)
end
code(encoding) click to toggle source
# File lib/multibases/bare.rb, line 123
def code(encoding)
  fetch_by!(encoding: encoding).code
end
codes() click to toggle source
# File lib/multibases/registry.rb, line 52
def codes
  Multibases::IMPLEMENTATIONS.values.map(&:code)
end
decode(data, *args) click to toggle source
# File lib/multibases/bare.rb, line 114
def decode(data, *args)
  encoded = Multibases.unpack(data)
  encoded.decode(*args)
end
decorate(encoded, encoding = nil) click to toggle source
# File lib/multibases/bare.rb, line 95
def decorate(encoded, encoding = nil)
  return encoded.pack if encoded.is_a?(Encoded)
  raise ArgumentError, 'Missing encoding of encoded data' unless encoding

  encoded = encoded.bytes unless encoded.is_a?(Array)

  Encoded.new(
    Multibases.code(encoding),
    encoding,
    encoded.length,
    EncodedByteArray.new(encoded)
  ).pack
end
encode(encoding, data, engine = Multibases.engine(encoding)) click to toggle source
# File lib/multibases/bare.rb, line 69
def encode(encoding, data, engine = Multibases.engine(encoding))
  raise NoEngine, encoding unless engine

  encoded_data = engine.encode(data)

  Encoded.new(
    Multibases.code(encoding),
    encoding,
    encoded_data.length,
    encoded_data
  )
end
encoding(code) click to toggle source
# File lib/multibases/bare.rb, line 119
def encoding(code)
  fetch_by!(code: code).encoding
end
engine(lookup) click to toggle source
# File lib/multibases/bare.rb, line 127
def engine(lookup)
  registration = find_by(code: lookup, encoding: lookup)
  raise NoEngine, lookup unless registration

  registration.engine
end
fetch_by!(code: nil, encoding: nil) click to toggle source
# File lib/multibases/registry.rb, line 38
def fetch_by!(code: nil, encoding: nil)
  return Multibases::IMPLEMENTATIONS.fetch(encoding) if encoding

  Multibases.find_by(code: code).tap do |found|
    raise KeyError, "No implementation has code #{code}" unless found
  end
end
find_by(code: nil, encoding: nil) click to toggle source
# File lib/multibases/registry.rb, line 46
def find_by(code: nil, encoding: nil)
  Multibases::IMPLEMENTATIONS.values.find do |v|
    v == code || v == encoding
  end
end
implement(encoding, code, implementation = nil, alphabet = nil, alphabet_encoding = nil) click to toggle source
# File lib/multibases/registry.rb, line 30
def implement(encoding, code, implementation = nil, alphabet = nil, alphabet_encoding = nil)
  Multibases::IMPLEMENTATIONS[encoding] = Registration.new(
    code,
    encoding,
    implementation&.new(alphabet, encoding: alphabet_encoding)
  )
end
multibase_version(multibase_semver = nil) click to toggle source
# File lib/multibases/registry.rb, line 60
def multibase_version(multibase_semver = nil)
  return @multibase_version if multibase_semver.nil?

  @multibase_version = multibase_semver
end
names() click to toggle source
# File lib/multibases/registry.rb, line 56
def names
  Multibases::IMPLEMENTATIONS.keys
end
pack(*args) click to toggle source
# File lib/multibases/bare.rb, line 109
def pack(*args)
  encoded = Multibases.encode(*args)
  encoded.pack
end
unpack(decorated) click to toggle source
# File lib/multibases/bare.rb, line 82
def unpack(decorated)
  decorated = decorated.pack('c*') if decorated.is_a?(Array)
  code = decorated[0]
  encoded_data = decorated[1..-1]

  Encoded.new(
    code,
    Multibases.encoding(code),
    encoded_data.length,
    EncodedByteArray.new(encoded_data.bytes)
  )
end