mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 06:21:12 +08:00
FEATURE: server side support for upload:// markdown
This allows uploads to be specified using short sha1 hash instead of full URL Client side change is pending
This commit is contained in:
35
lib/base62.rb
Normal file
35
lib/base62.rb
Normal file
@ -0,0 +1,35 @@
|
||||
# Modified version of: https://github.com/steventen/base62-rb
|
||||
|
||||
module Base62
|
||||
KEYS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".freeze
|
||||
KEYS_HASH = KEYS.each_char.with_index.inject({}) { |h, (k, v)| h[k] = v; h }
|
||||
BASE = KEYS.length
|
||||
|
||||
# Encodes base10 (decimal) number to base62 string.
|
||||
def self.encode(num)
|
||||
return "0" if num == 0
|
||||
return nil if num < 0
|
||||
|
||||
str = ""
|
||||
while num > 0
|
||||
# prepend base62 charaters
|
||||
str = KEYS[num % BASE] + str
|
||||
num = num / BASE
|
||||
end
|
||||
str
|
||||
end
|
||||
|
||||
# Decodes base62 string to a base10 (decimal) number.
|
||||
def self.decode(str)
|
||||
num = 0
|
||||
i = 0
|
||||
len = str.length - 1
|
||||
# while loop is faster than each_char or other 'idiomatic' way
|
||||
while i < str.length
|
||||
pow = BASE**(len - i)
|
||||
num += KEYS_HASH[str[i]] * pow
|
||||
i += 1
|
||||
end
|
||||
num
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user