Module: Philiprehberger::IdGen::Encoder
- Defined in:
- lib/philiprehberger/id_gen/encoder.rb
Constant Summary collapse
- DEFAULT_ALPHABET =
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
Class Method Summary collapse
- .decode(string, alphabet: DEFAULT_ALPHABET) ⇒ Object
- .encode(integer, alphabet: DEFAULT_ALPHABET) ⇒ Object
Class Method Details
.decode(string, alphabet: DEFAULT_ALPHABET) ⇒ Object
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
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 |