lib/pupa/models/concerns/contactable.rb
module Pupa
module Concerns
# Adds the Popolo `contact_details` property to a model.
module Contactable
extend ActiveSupport::Concern
included do
attr_reader :contact_details
dump :contact_details
end
def initialize(*args)
@contact_details = ContactDetailList.new
super
end
# Sets the contact details.
#
# @param [Array] contact_details a list of contact details
def contact_details=(contact_details)
@contact_details = ContactDetailList.new(symbolize_keys(contact_details))
end
# Adds a contact detail.
#
# @param [String] type a type of medium, e.g. "fax" or "email"
# @param [String] value a value, e.g. a phone number or email address
# @param [String] note a note, e.g. for grouping contact details by physical location
# @param [String] label a human-readable label for the contact detail
# @param [String,Date,Time] valid_from the date from which the contact detail is valid
# @param [String,Date,Time] valid_until the date from which the contact detail is no longer valid
def add_contact_detail(type, value, note: nil, label: nil, valid_from: nil, valid_until: nil)
data = {type: type, value: value}
if note
data[:note] = note
end
if label
data[:label] = label
end
if valid_from
data[:valid_from] = valid_from
end
if valid_until
data[:valid_until] = valid_until
end
if type.present? && value.present?
@contact_details << data
end
end
end
end
end