Module: Philiprehberger::IdGen::Encoder

Defined in:
lib/philiprehberger/id_gen/encoder.rb

Constant Summary collapse

DEFAULT_ALPHABET =
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

Class Method Summary collapse

Class Method Details

.decode(string, alphabet: DEFAULT_ALPHABET) ⇒ Object

Raises:



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/philiprehberger/id_gen/encoder.rb', line 25

def decode(string, alphabet: DEFAULT_ALPHABET)
  raise Error, 'String must not be empty' if string.nil? || string.empty?

  base = alphabet.length
  string.each_char.reduce(0) do |acc, char|
    index = alphabet.index(char)
    raise Error, "Character '#{char}' not in alphabet" unless index

    (acc * base) + index
  end
end

.encode(integer, alphabet: DEFAULT_ALPHABET) ⇒ Object

Raises:



10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/philiprehberger/id_gen/encoder.rb', line 10

def encode(integer, alphabet: DEFAULT_ALPHABET)
  raise Error, 'Value must be a non-negative integer' unless integer.is_a?(Integer) && integer >= 0

  base = alphabet.length
  return alphabet[0] if integer.zero?

  result = +''
  value = integer
  while value.positive?
    result.prepend(alphabet[value % base])
    value /= base
  end
  result
end