Class: MelissaData::WebSmart::PropertyXMLParser

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

Instance Attribute Summary

Attributes inherited from XMLParser

#xml_document

Instance Method Summary collapse

Methods included from Formatters

#viperize, #viperize_hash

Methods inherited from XMLParser

#children?, #initialize

Constructor Details

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

Instance Method Details

#build_subdictionary(xml_vals) ⇒ Object



48
49
50
51
52
# File 'lib/melissa_data/web_smart/xml.rb', line 48

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



54
55
56
57
58
# File 'lib/melissa_data/web_smart/xml.rb', line 54

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

#expected_fields?(fields) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#expected_retrieved?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/melissa_data/web_smart/xml.rb', line 72

def expected_retrieved?
  expected_fields?(retrieved_fields)
end

#field_detailsObject



44
45
46
# File 'lib/melissa_data/web_smart/xml.rb', line 44

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

#parseObject



35
36
37
38
39
40
41
42
# File 'lib/melissa_data/web_smart/xml.rb', line 35

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



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

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

#retrieved_fieldsObject



68
69
70
# File 'lib/melissa_data/web_smart/xml.rb', line 68

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