lib/humanized_id/humanizer.rb in humanized_id-0.1.0 vs lib/humanized_id/humanizer.rb in humanized_id-0.2.0
- old
+ new
@@ -1,43 +1,37 @@
# frozen_string_literal: true
module HumanizedId
class Humanizer
- SOURCE_CHARSET = %w(0123456789abcdefghijklmnopqrstuvwxyz).freeze
+ SOURCE_CHARSET = (('0'..'9').to_a + ('a'..'z').to_a).freeze
def initialize(id:, min_length: nil, prefix: '')
@id = id
@min_length = min_length
- @prefix = prefix.nil? ? '' : prefix
- @target_charset = HumanizedId::CHARACTERSET.join('')
- @source_charset = SOURCE_CHARSET.join('')
+ @prefix = prefix.to_s
+ @target_charset = CHARSET.join
+ @source_charset = SOURCE_CHARSET.join
end
def generate_humanized_id
- new_id = convert_to_target_base id: @id
- new_id = convert_to_target_charset id: new_id
- new_id = resize id: new_id if @min_length
+ new_id = resize convert_to_target_charset convert_to_target_base(@id)
"#{@prefix}#{new_id}"
end
private
- def convert_to_target_base(id: @id, target_base: @target_charset.length)
- id.to_s(target_base)
- rescue ArgumentError
- raise Error, 'id is not an integer'
+ def convert_to_target_base(id)
+ fail Error, 'id is not an integer' unless id.is_a? Integer
+ id.to_s(@target_charset.length)
end
- def convert_to_target_charset(
- id: @id, target_charset: @target_charset, source_charset: @source_charset)
- source_charset_subset = source_charset.slice(0, target_charset.length)
- id.tr(source_charset_subset, target_charset)
+ def convert_to_target_charset(id)
+ source_charset_subset = @source_charset.slice(0, @target_charset.length)
+ id.tr(source_charset_subset, @target_charset)
end
- def resize(id: @id, min_length: @min_length, target_charset: @target_charset)
- if min_length > id.length
- padding = target_charset[0] * (min_length - id.length)
- id = "#{padding}#{id}"
- end
- id
+ def resize(id)
+ return id if @min_length.nil? || @min_length <= id.length
+ padding = @target_charset[0] * (@min_length - id.length)
+ "#{padding}#{id}"
end
end
end