lib/sappy/response.rb in sappy-0.1.4 vs lib/sappy/response.rb in sappy-0.1.5
- old
+ new
@@ -7,35 +7,57 @@
r = new(xml)
r.parse
r
end
- def initialize(xml)
- @xml = xml
+ attr_reader :data, :xml
+
+ def initialize(data)
+ @data = data.to_s
+ @xml = Nokogiri::XML.parse(data)
end
+ def error_response?
+ resp = xml.xpath('//rsp')
+ resp && resp.first['stat'] == 'fail'
+ end
+
+ def error_response
+ resp = xml.xpath('//err')
+ resp && resp.first
+ end
+
+ def first_xpath(path)
+ node = xml.xpath(path)
+ node && node.first
+ end
+
def parse
- hash = XmlSimple.xml_in(@xml.to_s, 'KeepRoot' => false)
- if hash["stat"] == "fail"
- error = hash["err"]
- message = error.first["msg"]
- case code = error.first["code"]
+ if error_response?
+ error = error_response
+ message = error["msg"]
+ case code = error["code"]
when "AUTH_EXPIRED"
raise SessionExpired, "The auth session expired, reconnect to continue using the API"
else
failure(code, message)
raise UnhandledError, "Unhandled error: #{code}, #{message}"
end
else
- success(hash)
+ success
end
end
- def success(hash)
+ def success
raise NotImplementedError, "Overwrite #success in a Response subclass"
end
def failure(code, message)
- raise NotImplementedError, "Overwrite #failure in a Response subclass"
+ case code
+ when "WRONG_DATA"
+ raise ArgumentError, "You didn't provide a correct monitor id: #{message}"
+ else
+ raise NotImplementedError, "Overwrite #failure in a Response subclass"
+ end
end
end
end