lib/anybase.rb in anybase-0.0.3 vs lib/anybase.rb in anybase-0.0.4
- old
+ new
@@ -1,14 +1,14 @@
class Anybase
- attr_reader :chars
+ attr_reader :chars, :char_map, :num_map
UnrecognizedCharacterError = Class.new(RuntimeError)
def initialize(chars, opts = nil)
@chars = chars
- @ignore_case = opts && opts[:ignore_case] || false
+ @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
@@ -21,29 +21,30 @@
end
def to_i(val)
num = 0
(0...val.size).each{|i|
- num += (chars.size ** (val.size - i - 1)) * @char_map[val[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]
+ str[0, 0] = num_map[digit]
end
if options && options[:zero_pad]
- str[0, 0] = @num_map[0] * (options[:zero_pad] - str.size)
+ str[0, 0] = num_map[0] * (options[:zero_pad] - str.size)
end
- str == '' ? @num_map[0].dup : str
+ 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-_')
- Base62 = Anybase.new('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')
+ Base66ForURL = Anybase.new('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~')
end
\ No newline at end of file