Sha256: 6c40144f19a96a385730f08f11d45a789537fec72851827508d61fb6b5202126

Contents?: true

Size: 1.66 KB

Versions: 244

Compression:

Stored size: 1.66 KB

Contents

# SAX parser for the GetMetadata call.
class RETS::Base::SAXMetadata < Nokogiri::XML::SAX::Document
  attr_accessor :rets_data

  def initialize(block)
    @rets_data = {:delimiter => "\t"}
    @block = block
    @parent = {}
  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"
        raise RETS::APIError.new("#{@rets_data[:code]}: #{@rets_data[:text]}", @rets_data[:code], @rets_data[:text])
      end

    elsif tag == "SYSTEM"
      @rets_data[:system_id] = attrs.first.last

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

    # Start of the parent we're working with
    elsif tag =~ /^METADATA-(.+)/
      @parent[:tag] = tag
      @parent[:name] = $1
      @parent[:data] = []
      @parent[:attrs] = {}
      attrs.each {|attr| @parent[:attrs][attr[0]] = attr[1] }
    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])
    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

      @parent[:data].push(data)
    elsif tag == @parent[:tag]
      @block.call(@parent[:name], @parent[:attrs], @parent[:data])
      @parent[:tag] = nil
    end
  end
end

Version data entries

244 entries across 244 versions & 3 rubygems

Version Path
caboose-rets-0.1.214 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.213 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.212 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.211 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.210 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.209 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.208 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.207 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.206 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.205 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.204 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.203 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.202 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.201 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.200 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.199 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.198 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.197 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.196 lib/rets/base/sax_metadata.rb
caboose-rets-0.1.195 lib/rets/base/sax_metadata.rb