Sha256: 4000add59c92b5ad61adbe32dbf046bda7ef6c11339cd7e1b4ecc373ebd12dc7
Contents?: true
Size: 1.53 KB
Versions: 1
Compression:
Stored size: 1.53 KB
Contents
class Anybase attr_reader :chars, :char_map, :num_map UnrecognizedCharacterError = Class.new(RuntimeError) def initialize(chars, opts = nil) @chars = chars @ignore_case = opts && opts.key?(:ignore_case) ? opts[:ignore_case] : false @char_map = Hash.new{|h,k| raise UnrecognizedCharacterError.new("the character `#{k.chr}' is not included in #{@chars}")} @num_map = {} @chars.split('').each_with_index do |c, i| if @ignore_case @char_map[c[0]] = i @char_map[c.swapcase[0]] = i else @char_map[c[0]] = i end @num_map[i] = c end end def to_i(val) num = 0 (0...val.size).each{|i| num += (chars.size ** (val.size - i - 1)) * char_map[val[i]] } num end def to_native(val, options = nil) str = '' until val.zero? digit = val % chars.size val /= chars.size str[0, 0] = num_map[digit] end if options && options[:zero_pad] str[0, 0] = num_map[0] * (options[:zero_pad] - str.size) end str == '' ? num_map[0].dup : str end Hex = Anybase.new('0123456789abcdef', :ignore_case => true) Base62 = Anybase.new('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') Base64 = Anybase.new('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/') Base64ForURL = Anybase.new('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_') Base73ForURL = Anybase.new('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$-_.+!*\'(),') end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
anybase-0.0.5 | lib/anybase.rb |