class ActiveUxid::Hash

Public Class Methods

decode(id) click to toggle source
# File lib/active_uxid/hash.rb, line 15
def self.decode(id)
  klass = new(id)
  klass.decode_uxid
end
encode(id) click to toggle source
# File lib/active_uxid/hash.rb, line 10
def self.encode(id)
  klass = new(id)
  klass.encode_uxid
end
new(id) click to toggle source
Calls superclass method ActiveUxid::Base::new
# File lib/active_uxid/hash.rb, line 5
def initialize(id)
  @id = id
  super()
end

Public Instance Methods

decode_uxid() click to toggle source
# File lib/active_uxid/hash.rb, line 24
def decode_uxid
  (uxid_decode_chars(@id) >> encoding_length) - encoding_salt
end
encode_uxid() click to toggle source
# File lib/active_uxid/hash.rb, line 20
def encode_uxid
  uxid_encode_chars((@id + encoding_salt) << encoding_length)
end
uxid_decode_chars(id) click to toggle source
# File lib/active_uxid/hash.rb, line 42
def uxid_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
uxid_encode_chars(id) click to toggle source
# File lib/active_uxid/hash.rb, line 28
def uxid_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