lib/pupa/models/concerns/nameable.rb
module Pupa
module Concerns
# Adds the Popolo `other_names` property to a model.
module Nameable
extend ActiveSupport::Concern
included do
attr_reader :other_names
dump :other_names
end
def initialize(*args)
@other_names = []
super
end
# Sets the other names.
#
# @param [Array] other_names a list of other names
def other_names=(other_names)
@other_names = symbolize_keys(other_names)
end
# Adds an alternate or former name.
#
# @param [String] name an alternate or former name
# @param [String,Date,Time] start_date the date on which the name was adopted
# @param [String,Date,Time] end_date the date on which the name was abandoned
# @param [String] note a note, e.g. "Birth name"
# @param [String] family_name one or more family names
# @param [String] given_name one or more primary given names
# @param [String] additional_name one or more secondary given names
# @param [String] honorific_prefix one or more honorifics preceding a person's name
# @param [String] honorific_suffix one or more honorifics following a person's name
# @param [String] patronymic_name one or more patronymic names
def add_name(name, start_date: nil, end_date: nil, note: nil, family_name: nil, given_name: nil, additional_name: nil, honorific_prefix: nil, honorific_suffix: nil, patronymic_name: nil)
data = {name: name}
if start_date
data[:start_date] = start_date
end
if end_date
data[:end_date] = end_date
end
if note
data[:note] = note
end
if family_name
data[:family_name] = family_name
end
if given_name
data[:given_name] = given_name
end
if additional_name
data[:additional_name] = additional_name
end
if honorific_prefix
data[:honorific_prefix] = honorific_prefix
end
if honorific_suffix
data[:honorific_suffix] = honorific_suffix
end
if patronymic_name
data[:patronymic_name] = patronymic_name
end
if name.present?
@other_names << data
end
end
end
end
end