class Lite::Uxid::Hashid

Public Class Methods

decode(id) click to toggle source
# File lib/lite/uxid/hashid.rb, line 19
def decode(id)
  klass = new(id)
  klass.decode
end
encode(id) click to toggle source
# File lib/lite/uxid/hashid.rb, line 14
def encode(id)
  klass = new(id)
  klass.encode
end
new(id) click to toggle source
Calls superclass method Lite::Uxid::Base::new
# File lib/lite/uxid/hashid.rb, line 7
def initialize(id)
  @id = id
  super()
end

Public Instance Methods

decode() click to toggle source
# File lib/lite/uxid/hashid.rb, line 30
def decode
  (decode_chars(@id) >> encoding_length) - encoding_salt
end
encode() click to toggle source
# File lib/lite/uxid/hashid.rb, line 26
def encode
  encode_chars((@id + encoding_salt) << encoding_length)
end

Private Instance Methods

decode_chars(id) click to toggle source
# File lib/lite/uxid/hashid.rb, line 50
def decode_chars(id)
  pos = 0
  num = 0
  len = id.length
  max = len - 1

  while pos < len
    pow = encoding_base**(max - pos)
    num += encoding_chars.index(id[pos]) * pow
    pos += 1
  end

  num
end
encode_chars(id) click to toggle source
# File lib/lite/uxid/hashid.rb, line 36
def encode_chars(id)
  return '0' if id.zero?
  return nil if id.negative?

  str = ''

  while id.positive?
    str = "#{encoding_chars[id % encoding_base]}#{str}"
    id /= encoding_base
  end

  str
end