lib/xeroizer/response.rb in xeroizer-2.20.0 vs lib/xeroizer/response.rb in xeroizer-3.0.0

- old
+ new

@@ -1,69 +1,74 @@ # Copyright (c) 2008 Tim Connor <tlconnor@gmail.com> -# +# # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. -# +# # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. module Xeroizer class Response - + attr_accessor :id, :status, :errors, :provider, :date_time, :response_items, :request_params, :request_xml, :response_xml - + class << self - + # Parse the response retreived during any request. def parse(raw_response, request = {}, options = {}, &block) response = Xeroizer::Response.new response.response_xml = raw_response - + doc = Nokogiri::XML(raw_response) { | cfg | cfg.noblanks } - + # check for responses we don't understand raise Xeroizer::UnparseableResponse.new(doc.root.name) unless doc.root.name == 'Response' - + doc.root.elements.each do | element | - + # Text element if element.children && element.children.size == 1 && element.children.first.text? case element.name when 'Id' then response.id = element.text when 'Status' then response.status = element.text when 'ProviderName' then response.provider = element.text when 'DateTimeUTC' then response.date_time = Time.parse(element.text) end - + + # Special case for Paystubs and PayItems because they are not wrapped in plural element or + # don't have singular children + elsif element.children && element.children.size > 0 && (element.name == 'Paystub' || element.name == 'PayItems') + yield(response, [element], element.name) + # Records in response elsif element.children && element.children.size > 0 yield(response, element.children, element.children.first.name) end end - + response end - + end - + public - + def initialize @response_items = [] end - + def success? status == 'OK' end - + def error errors.blank? ? nil : errors[0] end - + end end \ No newline at end of file