class OmniFiles::UrlShortener
Public Class Methods
new(salt, bytes_used)
click to toggle source
# File lib/omnifiles/shortener.rb, line 9 def initialize salt, bytes_used @salt = salt @bytes_used = bytes_used # base62 @symbols = (0..9).to_a.map(&:to_s) + ('a'..'z').to_a + ('A'..'Z').to_a end
Public Instance Methods
shorten(url)
click to toggle source
# File lib/omnifiles/shortener.rb, line 16 def shorten url dig = Digest::MD5.digest(url+@salt.to_s) dig_ints = dig.unpack('N*').first(@bytes_used) dig_value = (0...dig_ints.length) .map { |i| (dig_ints[i] << ((dig_ints.length-i-1)*32)) } .reduce(:+) encode dig_value end
Private Instance Methods
encode(decimal)
click to toggle source
# File lib/omnifiles/shortener.rb, line 26 def encode(decimal) result = '' while decimal > 0 decimal, symbol = decimal.divmod(@symbols.size) result << @symbols[symbol] end result.reverse end