class Base32::Base

Public Class Methods

_build_binary() click to toggle source

(private) helpers

# File lib/base32-alphabets/base.rb, line 90
def self._build_binary
  ## e.g. '00000', '00001', '00010', '00011', etc.
  number.reduce({}) do |h, (char,index)|
    h[char]        = '%05b' % index
    h
  end
end
_build_code() click to toggle source
# File lib/base32-alphabets/base.rb, line 98
def self._build_code
  ## e.g. '00', '01', '02', '03', '04', etc.
  number.reduce({}) do |h, (char,index)|
    h[char]        = '%02d' % index
    h
  end
end
_clean( str ) click to toggle source
# File lib/base32-alphabets/base.rb, line 81
def self._clean( str )
  ## note: remove space ( ), dash (-), slash (/) for now as "allowed / supported" separators
  str.tr( ' -/', '' )
end
_decode( str ) click to toggle source
# File lib/base32-alphabets/base.rb, line 71
def self._decode( str )
  str = _clean( str )
  str.each_char.reduce([]) do |bytes,char|
    byte = number[char]
    raise ArgumentError, "Value passed not a valid base32 string - >#{char}< not found in alphabet"  if byte.nil?
    bytes << byte
    bytes
  end
end
_encode( bytes ) click to toggle source
# File lib/base32-alphabets/base.rb, line 32
def self._encode( bytes )
  bytes.reduce( String.new ) do |buf, byte|
    buf << alphabet[byte]
    buf
  end
end
_fmt( str, group: 4, sep: ' ' ) click to toggle source
# File lib/base32-alphabets/base.rb, line 49
def self._fmt( str, group: 4, sep: ' ' )
  str = _clean( str )

  ## format in groups of four (4) separated by space
  ##  e.g.  ccac7787fa7fafaa16467755f9ee444467667366cccceede
  ##     :  ccac 7787 fa7f afaa 1646 7755 f9ee 4444 6766 7366 cccc eede
  str.reverse.gsub( /(.{#{group}})/, "\\1#{sep}" ).reverse.sub( /^#{sep}/, '' )
end
bytes( num_or_str ) click to toggle source
# File lib/base32-alphabets/base.rb, line 10
def self.bytes( num_or_str )
  if num_or_str.is_a? String
    str   = num_or_str
    bytes = _decode( str )
  else  # assume number
    num   = num_or_str
    bytes = Base32._bytes( num )
  end
end
decode( str_or_bytes ) click to toggle source

Converts a base32 string to a base10 integer.

# File lib/base32-alphabets/base.rb, line 60
def self.decode( str_or_bytes )
  if str_or_bytes.is_a? Array
    bytes = str_or_bytes
  else  ## assume string
    str   = str_or_bytes
    bytes = _decode( str )
  end
  Base32._pack( bytes )
end
encode( num_or_bytes ) click to toggle source

Converts a base10 integer to a base32 string.

# File lib/base32-alphabets/base.rb, line 22
def self.encode( num_or_bytes )
  if num_or_bytes.is_a? Array
    bytes = num_or_bytes
  else
    num = num_or_bytes
    bytes = Base32._bytes( num )
  end
  _encode( bytes )
end
fmt( str_or_num_or_bytes, group: 4, sep: ' ' ) click to toggle source
# File lib/base32-alphabets/base.rb, line 39
def self.fmt( str_or_num_or_bytes, group: 4, sep: ' ' )
  if str_or_num_or_bytes.is_a? String
    str = str_or_num_or_bytes
  else  ## assume number (Integer) or bytes (Array)
    num_or_bytes = str_or_num_or_bytes
    str = encode( num_or_bytes )   ## auto-encode (shortcut)
  end
  _fmt( str, group: group, sep: sep )
end