mirror of
https://github.com/internetee/registry.git
synced 2025-08-05 17:28:18 +02:00
Support for disclosure settings. Tests
This commit is contained in:
parent
64b0481cb2
commit
4e5aecb26d
7 changed files with 119 additions and 21 deletions
|
@ -37,6 +37,7 @@ class Contact < ActiveRecord::Base
|
|||
after_destroy :domains_snapshot
|
||||
before_create :generate_code
|
||||
before_create :generate_auth_info
|
||||
after_create :ensure_disclosure
|
||||
|
||||
# scopes
|
||||
scope :current_registrars, ->(id) { where(registrar_id: id) }
|
||||
|
@ -63,6 +64,10 @@ class Contact < ActiveRecord::Base
|
|||
errors.add(:ident, 'bad format') unless code.valid?
|
||||
end
|
||||
|
||||
def ensure_disclosure
|
||||
create_disclosure!(ContactDisclosure.default_values) unless disclosure
|
||||
end
|
||||
|
||||
def domains_snapshot
|
||||
(domains + domains_owned).uniq.each do |domain|
|
||||
next unless domain.is_a?(Domain)
|
||||
|
|
|
@ -4,6 +4,18 @@ class ContactDisclosure < ActiveRecord::Base
|
|||
# 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
|
||||
|
@ -11,35 +23,27 @@ class ContactDisclosure < ActiveRecord::Base
|
|||
value = rules.attributes['flag'].value
|
||||
disclosure_hash = parse_disclose_xml(rules)
|
||||
|
||||
disclosure_hash.each do |k, _v|
|
||||
disclosure_hash.each do |k, _v| # provides a correct flag to disclosure elements
|
||||
disclosure_hash[k] = value
|
||||
end
|
||||
disclosure_hash
|
||||
default_values.merge(disclosure_hash)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Returns list of disclosure elements present.
|
||||
def parse_disclose_xml(rules)
|
||||
{ int_name: parse_element_attributes_for('name', rules.children, 'int'),
|
||||
int_org_name: parse_element_attributes_for('org_name', rules.children, 'int'),
|
||||
int_addr: parse_element_attributes_for('addr', rules.children, 'int'),
|
||||
loc_name: parse_element_attributes_for('name', rules.children, 'loc'),
|
||||
loc_org_name: parse_element_attributes_for('org_name', rules.children, 'loc'),
|
||||
loc_addr: parse_element_attributes_for('addr', rules.children, 'loc'),
|
||||
{ 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
|
||||
|
||||
# el is the element we are looking for
|
||||
# rules are the contents of disclose element
|
||||
# value is loc/int depending on what type of el we are looking for
|
||||
def parse_element_attributes_for(el, rules, value)
|
||||
rules.css(el).each do |rule|
|
||||
next unless rule.try(:attributes) || rule.attributes['type']
|
||||
return rule.attributes['type'].value.present? if rule.attributes['type'].value == value
|
||||
end
|
||||
def parse_element_attributes_for(el, rules)
|
||||
return true if rules.css(el).present?
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue