comfnd_parser.rb 1.03 KB
module Syspro
  module BusinessObjects
    module Parsers
      class ComFndParser
        attr_reader :doc

        def initialize(doc)
          @doc = doc
        end

        def parse
          header_details = doc.first_element_child.xpath("HeaderDetails")
          header_details_obj = header_details.children.map { |el|
            if el.name == "text"
              next
            end
            {
              name: el.name,
              text: el.text
            }
          }.compact

          rows = doc.first_element_child.xpath('Row')
          rows_obj = rows.map { |el|
            el.elements.map { |inner|
              {
                name: inner.name,
                value: inner.children.text
              }
            }
          }.flatten(1).compact

          FindObject.new(
            header_details_obj,
            rows_obj,
            doc.first_element_child.xpath('//RowsReturned').text.to_i
          )
        end

        FindObject = Struct.new(:header_details, :rows, :row_count)
      end
    end
  end
end