Sha256: 5d6be560f87b51bd53ba7c6509eb2ce3b5e12930d79862fcddd8a27c6cc82dd8

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

require 'rubygems'
require 'nokogiri'
module RETS4R
  class Client
    class CompactNokogiriParser < Nokogiri::XML::SAX::Document
      def parse_results(io)
        doc = CompactDocument.new
        parser = Nokogiri::XML::SAX::Parser.new(doc)
        parser.parse(io)
        doc.results
      end
      class CompactDocument < Nokogiri::XML::SAX::Document
        attr_reader :results
        
        def initialize
          @results = []
        end
        def start_element name, attrs = []
          case name
          when 'DELIMITER'
            @delimiter = attrs.last.to_i.chr
          when 'COLUMNS'
            @columns_element = true
            @string = ''
          when 'DATA'
            @data_element = true
            @string = ''
          end
        end

        def end_element name
          case name
          when 'COLUMNS'
            @columns_element = false
            @columns = @string.split(@delimiter)
          when 'DATA'
            @data_element = false
            @results << @columns.zip(@string.split(@delimiter)).inject({}) do | h,(k,v) |
              h[k] = v unless k.empty?
              next h
            end
          end
        end

        def characters string
          if @columns_element
            @string << string
          elsif @data_element
            @string << string
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
josephholsten-rets4r-1.1.16 lib/rets4r/client/parsers/compact_nokogiri.rb