class SlugConverter
Constants
- VERSION
Public Class Methods
new(number_or_slug)
click to toggle source
# File lib/slug_converter.rb, line 13 def initialize(number_or_slug) @alphabet = SlugConverter.configuration.alphabet.split(//) if number_or_slug.to_i != 0 @number = number_or_slug.to_i elsif validate_string(number_or_slug) @slug = number_or_slug.downcase else raise ArgumentError, 'Argument must be integer value or non-empty string consisting of predefined letters' end end
Public Instance Methods
number()
click to toggle source
# File lib/slug_converter.rb, line 24 def number if @number.nil? @number = bijective_decode else @number end end
number=(new_number)
click to toggle source
# File lib/slug_converter.rb, line 32 def number=(new_number) @number = new_number @slug = bijective_encode @number end
slug()
click to toggle source
# File lib/slug_converter.rb, line 38 def slug if @slug.nil? @slug = bijective_encode else @slug end end
slug=(new_slug)
click to toggle source
# File lib/slug_converter.rb, line 46 def slug=(new_slug) @slug = new_slug @number = bijective_decode @slug end
Private Instance Methods
bijective_decode()
click to toggle source
# File lib/slug_converter.rb, line 66 def bijective_decode i = 0 base = @alphabet.length @slug.each_char { |c| i = i * base + @alphabet.index(c) } i end
bijective_encode()
click to toggle source
# File lib/slug_converter.rb, line 54 def bijective_encode id = @number return @alphabet[0] if id == 0 s = '' base = @alphabet.length while id > 0 s << @alphabet[id.modulo(base)] id /= base end s.reverse end
validate_string(slug)
click to toggle source
# File lib/slug_converter.rb, line 73 def validate_string(slug) unless slug.nil? alphabet = Set.new @alphabet slug_letters = Set.new slug.downcase().split(//) slug != "" && (slug_letters.subset? alphabet) end end