Module: NameSearch::NameSearchablesConcerns

Defined in:
lib/name_search/name_searchables_concerns.rb

Instance Method Summary collapse

Instance Method Details

#create_new_name_searchables(names) ⇒ Object



28
29
30
31
32
33
# File 'lib/name_search/name_searchables_concerns.rb', line 28

def create_new_name_searchables(names)
  names_to_add = names - name_searchable_values
  names_to_add.each do |name|
    name_searchables.create name: NameSearch::Name.find_or_create_by(value: name)
  end
end

#destroy_orphaned_name_searchables(names) ⇒ Object

Destroys name_searchable values that used to exist but don't exist any longer Example: 'Jen York' changes to 'Jen Yoder', then 'york' would be destroyed



37
38
39
40
41
42
43
# File 'lib/name_search/name_searchables_concerns.rb', line 37

def destroy_orphaned_name_searchables(names)
  orphaned_names = name_searchable_values - names
  orphaned_names.each do |orphan_name|
    searchable = name_searchables.select{|x| x.name.value == orphan_name}.first
    searchable.destroy if searchable.present?
  end
end

#name_search_attributes_changed? ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/name_search/name_searchables_concerns.rb', line 45

def name_search_attributes_changed?()
  (changed & self.class.name_search_attributes.map(&:to_s)).length > 0
end

#name_search_attributes_names ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/name_search/name_searchables_concerns.rb', line 18

def name_search_attributes_names()
  names = []
  attributes = self.class.name_search_attributes
  attributes.each do |att|
    value = self.send(att)
    names.concat(NameSearch::Name.scrub_and_split_name(value))
  end
  names
end

#name_searchable_values(force_reload = false) ⇒ Object



14
15
16
# File 'lib/name_search/name_searchables_concerns.rb', line 14

def name_searchable_values(force_reload = false)
  name_searchables(force_reload).map{|x| x.name.value}
end

#sync_name_searchables ⇒ Object



3
4
5
6
# File 'lib/name_search/name_searchables_concerns.rb', line 3

def sync_name_searchables
  return unless name_search_attributes_changed?
  update_name_searchables
end

#update_name_searchables ⇒ Object



8
9
10
11
12
# File 'lib/name_search/name_searchables_concerns.rb', line 8

def update_name_searchables
  names = name_search_attributes_names
  create_new_name_searchables(names)
  destroy_orphaned_name_searchables(names)
end