class Correios::CEP::Parser

Constants

ADDRESS_MAP

Public Instance Methods

address(xml) click to toggle source
# File lib/correios/cep/parser.rb, line 17
def address(xml)
  doc = Ox.parse(xml)

  return_node = find_node(doc.nodes, 'return')
  return {} if return_node.nil?

  address =
    return_node.nodes.reduce({}) do |address_accumulator, element|
      key = ADDRESS_MAP[element.name]
      address_accumulator[key] = text_for(element) if key
      address_accumulator
    end

  join_complements(address)
  address
end

Private Instance Methods

find_node(nodes, name) click to toggle source
# File lib/correios/cep/parser.rb, line 36
def find_node(nodes, name)
  node = nodes.last
  return nil unless node.is_a?(Ox::Element)
  return node if node.nil? || node.name == name

  find_node(node.nodes, name)
end
join_complements(address) click to toggle source
# File lib/correios/cep/parser.rb, line 48
def join_complements(address)
  address[:complement] = "" if address[:complement].nil?
  address[:complement] += " #{address.delete(:complement2)}"
  address[:complement].strip!
end
text_for(element) click to toggle source
# File lib/correios/cep/parser.rb, line 44
def text_for(element)
  element.text.nil? ? "" : element.text.force_encoding(Encoding::UTF_8)
end