Sha256: c39d028ec203a42e1db88e61df431063bde75c8029b3f888a5c5547c86f1bc8b

Contents?: true

Size: 1.51 KB

Versions: 195

Compression:

Stored size: 1.51 KB

Contents

# SAX parser for the Search API call.
class RETS::Base::SAXSearch < Nokogiri::XML::SAX::Document
  attr_reader :rets_data

  def initialize(rets_data, block)
    @block = block
    @rets_data = rets_data
  end

  def start_element(tag, attrs)
    @current_tag = nil

    # Figure out if the request is a success
    if tag == "RETS"
      @rets_data[:code], @rets_data[:text] = attrs.first.last, attrs.last.last
      if @rets_data[:code] != "0" and @rets_data[:code] != "20201" and @rets_data[:code] != "20206" #added this check 7385
        raise RETS::APIError.new("#{@rets_data[:code]}: #{@rets_data[:text]}", @rets_data[:code], @rets_data[:text])
      end

    # Determine the separator for data
    elsif tag == "DELIMITER"
      @rets_data[:delimiter] = attrs.first.last.to_i.chr

    # Total records returned
    elsif tag == "COUNT"
      @rets_data[:count] = attrs.first.last.to_i

    # Parsing data
    elsif tag == "COLUMNS" or tag == "DATA"
      @buffer = ""
      @current_tag = tag
    end
  end

  def characters(string)
    @buffer << string if @current_tag
  end

  def end_element(tag)
    return unless @current_tag

    if @current_tag == "COLUMNS"
      @columns = @buffer.split(@rets_data[:delimiter])

    # Finalize data and send it off
    elsif tag == "DATA"
      data = {}

      list = @buffer.split(@rets_data[:delimiter])
      list.each_index do |index|
        next if @columns[index].nil? or @columns[index] == ""
        data[@columns[index]] = list[index]
      end

      @block.call(data)
    end
  end
end

Version data entries

195 entries across 195 versions & 1 rubygems

Version Path
caboose-rets-0.1.153 lib/rets/base/sax_search.rb
caboose-rets-0.1.152 lib/rets/base/sax_search.rb
caboose-rets-0.1.151 lib/rets/base/sax_search.rb
caboose-rets-0.1.150 lib/rets/base/sax_search.rb
caboose-rets-0.1.149 lib/rets/base/sax_search.rb
caboose-rets-0.1.148 lib/rets/base/sax_search.rb
caboose-rets-0.1.147 lib/rets/base/sax_search.rb
caboose-rets-0.1.146 lib/rets/base/sax_search.rb
caboose-rets-0.1.145 lib/rets/base/sax_search.rb
caboose-rets-0.1.144 lib/rets/base/sax_search.rb
caboose-rets-0.1.143 lib/rets/base/sax_search.rb
caboose-rets-0.1.142 lib/rets/base/sax_search.rb
caboose-rets-0.1.141 lib/rets/base/sax_search.rb
caboose-rets-0.1.140 lib/rets/base/sax_search.rb
caboose-rets-0.1.139 lib/rets/base/sax_search.rb
caboose-rets-0.1.138 lib/rets/base/sax_search.rb
caboose-rets-0.1.137 lib/rets/base/sax_search.rb
caboose-rets-0.1.136 lib/rets/base/sax_search.rb
caboose-rets-0.1.135 lib/rets/base/sax_search.rb
caboose-rets-0.1.134 lib/rets/base/sax_search.rb