Module: KSUID::Base62
- Defined in:
- lib/ksuid/base62.rb
Overview
Converts between numbers and an alphanumeric encoding
We store and report KSUIDs as base 62-encoded numbers to make them lexicographically sortable and compact to transmit. The base 62 alphabet consists of the Arabic numerals, followed by the English capital letters and the English lowercase letters.
Constant Summary collapse
- CHARSET =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
The character set used to encode numbers into base 62
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'- BASE =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
The base (62) that this module encodes numbers into
CHARSET.size
Class Method Summary collapse
-
.decode(ksuid) ⇒ Integer
Decodes a base 62-encoded string into an integer.
-
.encode(number) ⇒ String
Encodes a number (integer) as a base 62 string.
-
.encode_bytes(bytes) ⇒ String
Encodes a byte string or byte array into base 62.
Class Method Details
.decode(ksuid) ⇒ Integer
Decodes a base 62-encoded string into an integer
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/ksuid/base62.rb', line 33 def self.decode(ksuid) result = 0 ksuid.split('').each_with_index do |char, position| unless (digit = CHARSET.index(char)) raise(ArgumentError, "#{ksuid} is not a base 62 number") end result += digit * BASE**(ksuid.length - (position + 1)) end result end |
.encode(number) ⇒ String
Encodes a number (integer) as a base 62 string
57 58 59 60 61 62 |
# File 'lib/ksuid/base62.rb', line 57 def self.encode(number) chars = encode_without_padding(number) chars << padding if chars.empty? chars.reverse.join('').rjust(STRING_LENGTH, padding) end |
.encode_bytes(bytes) ⇒ String
Encodes a byte string or byte array into base 62
76 77 78 |
# File 'lib/ksuid/base62.rb', line 76 def self.encode_bytes(bytes) encode(Utils.int_from_bytes(bytes)) end |