class TaxCloud::Responses::Base

A base TaxCloud SOAP response.

Attributes

raw[RW]

Raw response.

Public Class Methods

error_message(value) click to toggle source

Parameters

value

Location of the error message in the SOAP XML.

# File lib/tax_cloud/responses/base.rb, line 24
def error_message(value)
  set_dsl(:error_message, value)
end
error_number(value) click to toggle source

Parameters

value

Location of the error number in the SOAP XML.

# File lib/tax_cloud/responses/base.rb, line 30
def error_number(value)
  set_dsl(:error_number, value)
end
new(savon_response) click to toggle source

Parameters

savon_response

Response from a SOAP API call.

# File lib/tax_cloud/responses/base.rb, line 10
def initialize(savon_response)
  @raw = savon_response.to_hash
  parse!
end
parse(savon_response) click to toggle source

Parse a SOAP response.

Parameters

savon_response

SOAP response.

# File lib/tax_cloud/responses/base.rb, line 38
def parse(savon_response)
  new(savon_response)
end
response_type(value) click to toggle source

Parameters

value

Location of the response type in the SOAP XML.

# File lib/tax_cloud/responses/base.rb, line 18
def response_type(value)
  set_dsl(:response_type, value)
end

Private Class Methods

set_dsl(key, value) click to toggle source
# File lib/tax_cloud/responses/base.rb, line 62
def set_dsl(key, value)
  self.dsl ||= {}
  self.dsl[key] = value
  self.dsl
end

Public Instance Methods

match(chain) click to toggle source

Match an element in the SOAP response.

Parameters

chain

XML path to match.

# File lib/tax_cloud/responses/base.rb, line 47
def match(chain)
  current_value = raw
  chain.split('/').each do |key|
    current_value = current_value[key.to_sym]
    next if current_value
    raise TaxCloud::Errors::UnexpectedSoapResponse.new(raw, key, chain)
  end
  current_value
end

Private Instance Methods

parse!() click to toggle source
# File lib/tax_cloud/responses/base.rb, line 69
def parse!
  if self.dsl[:response_type]
    case match(self.dsl[:response_type])
    when 'OK', 'Informational' then
      return true
    end
  elsif self.dsl[:error_number]
    return true if match(self.dsl[:error_number]) == '0'
  end
  raise TaxCloud::Errors::ApiError.new(match(self.dsl[:error_message]), raw) if self.dsl[:error_message]
end