class MaleOrFemale::Detector
Public Class Methods
new(name, options = {})
click to toggle source
# File lib/male_or_female.rb, line 20 def initialize(name, options = {}) source = options[:source] || 'compiled' @name = prepare_name(name) @data = load_data(@name[0], source.to_sym) @result = detect end
Public Instance Methods
format()
click to toggle source
# File lib/male_or_female.rb, line 33 def format result = nil FORMATS.each { |format| return format if @result =~ /[_](#{format})/i } result.nil? ? UNKNOWN : result end
gender()
click to toggle source
# File lib/male_or_female.rb, line 27 def gender result = nil GENDERS.each { |gender| result = gender if @result =~ /(\s|^)(#{gender})[_]/i } result.nil? ? UNKNOWN : result end
Private Instance Methods
detect()
click to toggle source
Проверет имя (возьмет первую букву от имени, проверит значение в в хеше @data).
Вернет: 'male_formal', 'female_formal', 'unisex' etc.
# File lib/male_or_female.rb, line 59 def detect result = nil return result if @data.nil? || @data[@name[0]].nil? # ["male_formal", "Август Авдей Аверкий ... "] @data[@name[0]].each do |sex| next if sex[1].nil? result = sex[0] if sex[1] =~ /(\s|^)(#{@name})(\s|$)/i end result end
load_data(letter, source = :source)
click to toggle source
PRIVATE
# File lib/male_or_female.rb, line 42 def load_data(letter, source = :source) case source when :source source = "#{SOURCE_DIR}/ru/#{UnicodeUtils.downcase(letter)}.yaml" return nil unless File.exist?(source) YAML.load_file(File.open(source)) when :compiled YAML.load_file(File.open("#{COMPILED_DIR}/ru.yaml")) else raise ArgumentError.new("Invalid source option: #{source}") end end
prepare_name(name)
click to toggle source
# File lib/male_or_female.rb, line 72 def prepare_name(name) name = UnicodeUtils.downcase(name).strip name = name.gsub(/[ё]/i, 'е') name[0] = UnicodeUtils.upcase(name[0]) name rescue raise ArgumentError.new('Name should be a string') end