Hash: select entries by keys

This commit is contained in:
Karl Erik Õunapuu 2021-01-07 13:59:12 +02:00
parent c23075fa19
commit c58b4fb2e9
No known key found for this signature in database
GPG key ID: C9DD647298A34764
11 changed files with 201 additions and 141 deletions

View file

@ -47,14 +47,16 @@ module Deserializers
# schema validation prevents both in the same parent node
if frame.css('dsData').present?
frame.css('dsData').each do |ds_data|
@ds_data << Deserializers::Xml::DnssecKey.new(ds_data, true).call
end
else
frame.css('keyData').each do |key|
@key_data << Deserializers::Xml::DnssecKey.new(key, false).call
end
frame.css('dsData').each { |k| @ds_data << key_from_params(k, dsa: true) }
end
return if frame.css('keyData').blank?
frame.css('keyData').each { |k| @key_data << key_from_params(k, dsa: false) }
end
def key_from_params(obj, dsa: false)
Deserializers::Xml::DnssecKey.new(obj, dsa).call
end
def call
@ -67,9 +69,8 @@ module Deserializers
end
def mark_destroy(dns_keys)
(ds_data.present? ? ds_filter(dns_keys) : kd_filter(dns_keys)).map do |inf_data|
inf_data.blank? ? nil : mark(inf_data)
end
data = ds_data.present? ? ds_filter(dns_keys) : kd_filter(dns_keys)
data.each { |inf_data| inf_data.blank? ? nil : mark(inf_data) }
end
private

View file

@ -1,8 +1,7 @@
module Deserializers
module Xml
class Domain
attr_reader :frame
attr_reader :registrar
attr_reader :frame, :registrar
def initialize(frame, registrar)
@frame = frame
@ -15,15 +14,24 @@ module Deserializers
registrar_id: registrar,
registrant_id: if_present('registrant'),
reserved_pw: if_present('reserved > pw'),
period: frame.css('period').text.present? ? Integer(frame.css('period').text) : 1,
period_unit: frame.css('period').first ? frame.css('period').first[:unit] : 'y',
}
attributes.merge!(assign_period_attributes)
pw = frame.css('authInfo > pw').text
attributes[:transfer_code] = pw if pw.present?
attributes.compact
end
def assign_period_attributes
period = frame.css('period')
{
period: period.text.present? ? Integer(period.text) : 1,
period_unit: period.first ? period.first[:unit] : 'y',
}
end
def if_present(css_path)
return if frame.css(css_path).blank?

View file

@ -42,20 +42,18 @@ module Deserializers
end
def nameservers
nameservers = []
frame.css('add > ns > hostAttr').each do |ns|
nsrv = Deserializers::Xml::Nameserver.new(ns).call
nsrv[:action] = 'add'
nameservers << nsrv
end
@nameservers = []
frame.css('rem > ns > hostAttr').each do |ns|
nsrv = Deserializers::Xml::Nameserver.new(ns).call
nsrv[:action] = 'rem'
nameservers << nsrv
end
frame.css('add > ns > hostAttr').each { |ns| assign_ns(ns) }
frame.css('rem > ns > hostAttr').each { |ns| assign_ns(ns, add: false) }
nameservers.presence
@nameservers.presence
end
def assign_ns(nameserver, add: true)
nsrv = Deserializers::Xml::Nameserver.new(nameserver).call
nsrv[:action] = add ? 'add' : 'rem'
@nameservers << nsrv
end
def dns_keys
@ -72,17 +70,12 @@ module Deserializers
def statuses
return if frame.css('status').blank?
statuses = []
s = []
frame.css('add > status').each do |e|
statuses << { status: e.attr('s').to_s, action: 'add' }
end
frame.css('add > status').each { |e| s << { status: e.attr('s'), action: 'add' } }
frame.css('rem > status').each { |e| s << { status: e.attr('s'), action: 'rem' } }
frame.css('rem > status').each do |e|
statuses << { status: e.attr('s').to_s, action: 'rem' }
end
statuses
s
end
def legal_document