Class: MelissaData::WebSmart::PropertyXMLParser

Inherits:
XMLParser
  • Object
show all
Defined in:
lib/melissa_data/web_smart/xml.rb

Instance Attribute Summary

Attributes inherited from XMLParser

#xml_document

Instance Method Summary collapse

Methods inherited from XMLParser

#children?, #initialize, #viperize, #viperize_hash

Constructor Details

This class inherits a constructor from MelissaData::WebSmart::XMLParser

Instance Method Details

#build_subdictionary(xml_vals) ⇒ Object



63
64
65
66
67
# File 'lib/melissa_data/web_smart/xml.rb', line 63

def build_subdictionary(xml_vals)
  keys = xml_vals.map(&:name)
  vals = xml_vals.map { |v| v.children.first.text unless children? v }
  viperize_hash(keys.zip(vals).to_h)
end

#expected_fieldsObject



69
70
71
72
73
# File 'lib/melissa_data/web_smart/xml.rb', line 69

def expected_fields
  [ "Building", "CurrentDeed", "CurrentSale", "Lot", "Owner",
    "OwnerAddress", "Parcel", "ParsedPropertyAddress", "PriorSale",
    "PropertyAddress", "RecordID", "Result", "SquareFootage", "Values"]
end

#expected_fields?(fields) ⇒ Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/melissa_data/web_smart/xml.rb', line 75

def expected_fields?(fields)
  expected_fields == fields.sort
end

#expected_retrieved?Boolean

Returns:

  • (Boolean)


87
88
89
# File 'lib/melissa_data/web_smart/xml.rb', line 87

def expected_retrieved?
  expected_fields?(retrieved_fields)
end

#field_detailsObject



59
60
61
# File 'lib/melissa_data/web_smart/xml.rb', line 59

def field_details
  record_node.children.map(&:children)
end

#parseObject



50
51
52
53
54
55
56
57
# File 'lib/melissa_data/web_smart/xml.rb', line 50

def parse
  parsed_hash = {}
  if expected_retrieved?
    retrieved_fields.each_with_index { |f, i| parsed_hash[f] = { data: field_details[i] } }
    parsed_hash.keys.each { |k| parsed_hash[k] = build_subdictionary(parsed_hash[k][:data]) }
    viperize_hash(parsed_hash)
  end
end

#record_nodeObject



79
80
81
# File 'lib/melissa_data/web_smart/xml.rb', line 79

def record_node
  xml_document.children.first.children.last # its just how they structure it..
end

#retrieved_fieldsObject



83
84
85
# File 'lib/melissa_data/web_smart/xml.rb', line 83

def retrieved_fields
  record_node.children.map(&:name)
end