internetee-registry/app/models/contact_disclosure.rb
2014-12-01 11:25:47 +02:00

68 lines
1.9 KiB
Ruby

class ContactDisclosure < ActiveRecord::Base
belongs_to :contact
def attributes_with_flag
attrs, policy = { name: name, email: email, phone: phone, address: address, org_name: org_name, fax: fax }, {}
policy[0] = attrs.map { |k, v| k if v == false }.compact
policy[1] = attrs.map { |k, v| k if v }.compact
policy
end
def as_hash
{
name: name,
org_name: org_name,
phone: phone,
fax: fax,
email: email,
address: address
}
end
# value is true or false depending on disclosure flag
# rules are the contents of disclose element
class << self
def default_values
@dc = {
name: Setting.disclosure_name,
org_name: Setting.disclosure_org_name,
phone: Setting.disclosure_phone,
fax: Setting.disclosure_fax,
email: Setting.disclosure_email,
address: Setting.disclosure_address
}
@dc
end
def extract_attributes(parsed_frame)
disclosure_hash = {}
rules = parsed_frame.css('disclose').first
return disclosure_hash unless rules.present?
value = rules.attributes['flag'].value
disclosure_hash = parse_disclose_xml(rules)
disclosure_hash.each do |k, _v| # provides a correct flag to disclosure elements
disclosure_hash[k] = value
end
disclosure_hash
end
private
# Returns list of disclosure elements present.
def parse_disclose_xml(rules)
{ name: parse_element_attributes_for('name', rules.children),
org_name: parse_element_attributes_for('org_name', rules.children),
address: parse_element_attributes_for('addr', rules.children),
phone: rules.css('voice').present?,
email: rules.css('email').present?,
fax: rules.css('fax').present?
}.delete_if { |_k, v| v.nil? || v == false }
end
def parse_element_attributes_for(el, rules)
return true if rules.css(el).present?
nil
end
end
end