module ULID::CrockfordBase32

@see www.crockford.com/base32.html

This module supporting only `subset of original crockford for actual use-case` in ULID context. Original decoding spec allows other characters. But I think ULID should allow `subset` of Crockford's Base32. See below

* https://github.com/ulid/spec/pull/57
* https://github.com/kachick/ruby-ulid/issues/57
* https://github.com/kachick/ruby-ulid/issues/78

Constants

CROCKFORD_BASE32_CHAR_BY_N32_CHAR
CROCKFORD_BASE32_CHAR_PATTERN
N32_CHAR_BY_CROCKFORD_BASE32_CHAR
N32_CHAR_PATTERN
STANDARD_BY_VARIANT
VARIANT_PATTERN

Public Class Methods

decode(string) click to toggle source

@api private @param [String] string @return [Integer]

# File lib/ulid/crockford_base32.rb, line 72
def self.decode(string)
  n32encoded = string.upcase.gsub(CROCKFORD_BASE32_CHAR_PATTERN, N32_CHAR_BY_CROCKFORD_BASE32_CHAR)
  n32encoded.to_i(32)
end
encode(integer) click to toggle source

@api private @param [Integer] integer @return [String]

# File lib/ulid/crockford_base32.rb, line 80
def self.encode(integer)
  n32encoded = integer.to_s(32)
  n32encoded.upcase.gsub(N32_CHAR_PATTERN, CROCKFORD_BASE32_CHAR_BY_N32_CHAR).rjust(ENCODED_LENGTH, '0')
end
normalize(string) click to toggle source

@api private @param [String] string @return [String]

# File lib/ulid/crockford_base32.rb, line 88
def self.normalize(string)
  string.gsub(VARIANT_PATTERN, STANDARD_BY_VARIANT)
end