module B3bm

Constants

ALPHABET
CHARACTER_TO_INTEGER
INTEGER_TO_CHARACTER
VERSION

Public Class Methods

decode(value, string: true) click to toggle source
public

Decode a Base62 string to a string or integer result.

# File lib/b3bm.rb, line 62
def self.decode(value, string: true)
  if value.size > 0
    result = []
    integer = 0
    zeroes = 0
    leading = true

    value.to_s.each_char do |character|
      if leading
        if character == "0"
          zeroes += 1
        else
          leading = false
        end
      end

      integer *= 62
      integer += (CHARACTER_TO_INTEGER[character] || raise(Invalid, "`#{character}' is not in the alphabet"))
    end

    if string == true
      while integer > 0
        result.unshift(integer % 256)
        integer /= 256
      end

      while zeroes > 0
        result.unshift(0)
        zeroes -= 1
      end

      result.pack("c*")
    else
      integer
    end
  elsif string == true
    ""
  else
    0
  end
end
encode(value) click to toggle source
public

Encode a string or integer as Base62.

# File lib/b3bm.rb, line 19
def self.encode(value)
  result = +""

  if value.size > 0
    zeroes = 0

    case value
    when Integer
      integer = value
    else
      integer = 0
      leading = true

      value.to_s.each_byte do |byte|
        if leading
          if byte == 0
            zeroes += 1
          else
            leading = false
          end
        end

        integer *= 256
        integer += byte
      end
    end

    while integer > 0
      result.prepend(INTEGER_TO_CHARACTER[integer % 62])
      integer /= 62
    end

    while zeroes > 0
      result.prepend("0")
      zeroes -= 1
    end
  end

  result
end
version() click to toggle source
# File lib/b3bm/version.rb, line 6
def self.version
  VERSION
end