Class: NameSearch::NickNameFamily

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/name_search/models/nick_name_family.rb

Class Method Summary collapse

Class Method Details

.create_family(*nick_names) ⇒ Object



8
9
10
11
12
13
14
15
# File 'lib/name_search/models/nick_name_family.rb', line 8

def self.create_family(*nick_names)
  family = NickNameFamily.create
  scrubbed_names = nick_names.flatten.map{|x| Name.scrub_and_split_name(x)}.flatten
  scrubbed_names.each do |name|
    family.names << Name.find_or_create_by(value: name)
  end
  family
end

.other_families(first_name, names) ⇒ Object



46
47
48
# File 'lib/name_search/models/nick_name_family.rb', line 46

def self.other_families(first_name, names)
  names.map(&:nick_name_family_ids).flatten.uniq - first_name.nick_name_family_ids
end

.process_file_line(line) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/name_search/models/nick_name_family.rb', line 23

def self.process_file_line(line)
  scrubbed_name_values = line.split.map{|x| Name.scrub_and_split_name(x)}.flatten
  names = Name.where(:value => scrubbed_name_values).to_a
  first_name = names.find{|x| x.value == scrubbed_name_values.first}

  if should_create_new_family?(first_name, names)
    family = NickNameFamily.create
    scrubbed_name_values.each do |name|
      family.names << Name.find_or_create_by(value: name)
    end
  else
    scrubbed_name_values.from(1).each do |name|
      first_name.nick_name_families.first.names << Name.find_or_create_by(value: name)
    end
  end
end

.should_create_new_family?(first_name, names) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
43
44
# File 'lib/name_search/models/nick_name_family.rb', line 40

def self.should_create_new_family?(first_name, names)
  first_name.nil? ||
  first_name.nick_name_families.length == 0 ||
  other_families(first_name, names).length > 0
end

.update_families_from_file(file_name) ⇒ Object



17
18
19
# File 'lib/name_search/models/nick_name_family.rb', line 17

def self.update_families_from_file(file_name)
  File.open(file_name).each_line{|line| process_file_line(line)}
end