Class: RETS4R::ResponseDocument::Base
- Inherits:
-
Nokogiri::XML::Document
- Object
- Nokogiri::XML::Document
- RETS4R::ResponseDocument::Base
- Defined in:
- lib/rets4r/response_document/base.rb
Overview
A ResponseDocument is a Nokogiri XML Document that lets you access all the important information in a RETS service response. This is a DOM style API, so if you have large files to handle or experience performance issues, you should consider switching to RETS4R::Client::CompactNokogiriParser::CompactDocument which provides a SAX API
Direct Known Subclasses
Class Method Summary collapse
-
.safe_parse(*args) ⇒ Object
like #parse, but set the noblanks, noerror and recover options.
Instance Method Summary collapse
-
#count ⇒ Object
the value of the Records attribute in the COUNT element as an integer.
-
#error? ⇒ Boolean
true unless the response was a success (reply_code: 0) or found no records (reply_code: 20201).
-
#invalid? ⇒ Boolean
true if the document is not #valid?.
-
#max_rows? ⇒ Boolean
(also: #maxrows?)
true if the document has a MAXROWS element.
-
#parse_count ⇒ Object
a new transaction with the count as its response.
-
#parse_key_value ⇒ Object
a new transaction with the hash of the body in the response – TODO: put this in a LoginResponseDocument.
-
#parse_results ⇒ Object
a new transaction with the response parsed using the CompactDataParser.
-
#reply_code ⇒ Object
the reply code as an integer.
-
#reply_text ⇒ Object
the contents of the ReplyText attribute.
-
#rets? ⇒ Boolean
true if the root element is named ‘RETS’.
-
#success? ⇒ Boolean
true if the reply code indicates success (is 0).
-
#to_h ⇒ Object
the body of the document parsed into a hash.
-
#to_rexml ⇒ Object
the ResponseDocument converted to a REXML::Document.
-
#to_transaction ⇒ Object
a new transaction from this document.
-
#valid? ⇒ Boolean
true if there are no noticeable errors with the document.
-
#validate! ⇒ Object
raises exceptions if things are wrong.
Class Method Details
.safe_parse(*args) ⇒ Object
like #parse, but set the noblanks, noerror and recover options
16 17 18 19 20 21 22 |
# File 'lib/rets4r/response_document/base.rb', line 16 def self.safe_parse(*args) parse(*args) do |config| config.strict.noblanks config.strict.noerror config.strict.recover end end |
Instance Method Details
#count ⇒ Object
the value of the Records attribute in the COUNT element as an integer
90 91 92 |
# File 'lib/rets4r/response_document/base.rb', line 90 def count self.at('/RETS/COUNT')['Records'].to_i end |
#error? ⇒ Boolean
true unless the response was a success (reply_code: 0) or found no records (reply_code: 20201)
54 55 56 |
# File 'lib/rets4r/response_document/base.rb', line 54 def error? reply_code > 0 && reply_code != 20201 end |
#invalid? ⇒ Boolean
true if the document is not #valid?
65 66 67 |
# File 'lib/rets4r/response_document/base.rb', line 65 def invalid? !valid? end |
#max_rows? ⇒ Boolean Also known as: maxrows?
true if the document has a MAXROWS element
45 46 47 |
# File 'lib/rets4r/response_document/base.rb', line 45 def max_rows? search('/RETS/MAXROWS').length > 0 end |
#parse_count ⇒ Object
a new transaction with the count as its response
100 101 102 |
# File 'lib/rets4r/response_document/base.rb', line 100 def parse_count to_transaction { count } end |
#parse_key_value ⇒ Object
a new transaction with the hash of the body in the response – TODO: put this in a LoginResponseDocument
112 113 114 |
# File 'lib/rets4r/response_document/base.rb', line 112 def parse_key_value to_transaction { to_h } end |
#parse_results ⇒ Object
a new transaction with the response parsed using the CompactDataParser
105 106 107 |
# File 'lib/rets4r/response_document/base.rb', line 105 def parse_results RETS4R::ResponseDocument::Search.parse(self.to_s).to_transaction end |
#reply_code ⇒ Object
the reply code as an integer
30 31 32 |
# File 'lib/rets4r/response_document/base.rb', line 30 def reply_code root['ReplyCode'].to_i end |
#reply_text ⇒ Object
the contents of the ReplyText attribute
40 41 42 |
# File 'lib/rets4r/response_document/base.rb', line 40 def reply_text root['ReplyText'] end |
#rets? ⇒ Boolean
true if the root element is named ‘RETS’
25 26 27 |
# File 'lib/rets4r/response_document/base.rb', line 25 def rets? root && root.name == 'RETS' end |
#success? ⇒ Boolean
true if the reply code indicates success (is 0)
35 36 37 |
# File 'lib/rets4r/response_document/base.rb', line 35 def success? reply_code == 0 end |
#to_h ⇒ Object
the body of the document parsed into a hash. Intended for use with Login responses – TODO: put this in a LoginResponseDocument
120 121 122 123 124 125 |
# File 'lib/rets4r/response_document/base.rb', line 120 def to_h pairs = first_child.text.each_line.collect do |line| parse_key_value_line(line) end Hash[pairs] end |
#to_rexml ⇒ Object
the ResponseDocument converted to a REXML::Document
95 96 97 |
# File 'lib/rets4r/response_document/base.rb', line 95 def to_rexml REXML::Document.new(to_s) end |
#to_transaction ⇒ Object
a new transaction from this document. An optional block will be evaluated and placed in the transaction response, if provided
129 130 131 132 133 |
# File 'lib/rets4r/response_document/base.rb', line 129 def to_transaction Client::Transaction.new(self).tap do |t| t.response = yield if block_given? end end |
#valid? ⇒ Boolean
true if there are no noticeable errors with the document. use #validate! if you need to access the errors
60 61 62 |
# File 'lib/rets4r/response_document/base.rb', line 60 def valid? !blank? && rets? && !error? end |
#validate! ⇒ Object
raises exceptions if things are wrong. checks for
- blank?
-
raises RETSException if the document is blank?
- rets?
-
raises RETSException if the document is not rets?
- error?
-
raises the relevant exception type if the reply_code indicates an error
returns self, so you can chain this – TODO: write a validate that’s consistant with the one in nokogiri
77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/rets4r/response_document/base.rb', line 77 def validate! raise Client::RETSException, 'No transaction body was returned.' if blank? raise Client::RETSException, "Response had invalid root node. Document was: #{inspect}" unless rets? if error? exception_type = Client::EXCEPTION_TYPES[reply_code] || Client::RETSTransactionException raise exception_type, "#{reply_code} - #{reply_text}" end self end |