Class: RETS::Base::SAXSearch
- Inherits:
-
Nokogiri::XML::SAX::Document
- Object
- Nokogiri::XML::SAX::Document
- RETS::Base::SAXSearch
- Defined in:
- lib/rets/base/sax_search.rb
Overview
SAX parser for the Search API call.
Instance Attribute Summary collapse
-
#rets_data ⇒ Object
readonly
Returns the value of attribute rets_data.
Instance Method Summary collapse
- #characters(string) ⇒ Object
- #end_element(tag) ⇒ Object
-
#initialize(rets_data, block) ⇒ SAXSearch
constructor
A new instance of SAXSearch.
- #start_element(tag, attrs) ⇒ Object
Constructor Details
#initialize(rets_data, block) ⇒ SAXSearch
Returns a new instance of SAXSearch.
5 6 7 8 |
# File 'lib/rets/base/sax_search.rb', line 5 def initialize(rets_data, block) @block = block @rets_data = rets_data end |
Instance Attribute Details
#rets_data ⇒ Object (readonly)
Returns the value of attribute rets_data.
3 4 5 |
# File 'lib/rets/base/sax_search.rb', line 3 def rets_data @rets_data end |
Instance Method Details
#characters(string) ⇒ Object
35 36 37 |
# File 'lib/rets/base/sax_search.rb', line 35 def characters(string) @buffer << string if @current_tag end |
#end_element(tag) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/rets/base/sax_search.rb', line 39 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 |
#start_element(tag, attrs) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/rets/base/sax_search.rb', line 10 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 |