class Assist::WebServices::Base

Attributes

params[R]

Public Class Methods

new(extra_params) click to toggle source
# File lib/assist/web_services/base.rb, line 12
def initialize(extra_params)
  extra_params =
    normalize_keys(extra_params)
      .keep_if { |k| self.class::PERMITTED_EXTRA_PARAMS.include?(k) }
  @params = default_params.merge(extra_params)
end

Public Instance Methods

original_response() click to toggle source
# File lib/assist/web_services/base.rb, line 32
def original_response
  response
end
perform() click to toggle source
# File lib/assist/web_services/base.rb, line 19
def perform
  response
  self
end
request_params() click to toggle source
# File lib/assist/web_services/base.rb, line 28
def request_params
  params
end
result() click to toggle source
# File lib/assist/web_services/base.rb, line 24
def result
  @result ||= parse_result
end

Private Instance Methods

check_response!(xml) click to toggle source
# File lib/assist/web_services/base.rb, line 69
def check_response!(xml)
  attrs = xml.elements["result"].attributes
  return if attrs["firstcode"].to_s == '0'

  raise Exception::APIError,
        "Assist API error: firstcode=#{attrs['firstcode']}, \
          secondcode=#{attrs['secondcode']}"
end
default_params() click to toggle source
# File lib/assist/web_services/base.rb, line 40
def default_params
  {
    merchant_id: Assist.config.merchant_id,
    login: Assist.config.login,
    password: Assist.config.password,
    format: 3
  }
end
parse_result() click to toggle source
# File lib/assist/web_services/base.rb, line 78
def parse_result
  raise NotImplementedError, "Must be implemented by subtypes"
end
response() click to toggle source
# File lib/assist/web_services/base.rb, line 49
def response
  return @response if @response

  uri = URI(Assist.config.endpoint + self.class::SERVICE_PATH)
  @response = Net::HTTP.post_form(uri, params)
end
response_xml() click to toggle source
# File lib/assist/web_services/base.rb, line 56
def response_xml
  return @response_xml if @response_xml

  if response.code != '200'
    raise Exception::APIError,
          "Invalid response: code=#{response.code}"
  end

  xml = REXML::Document.new(response.body)
  check_response!(xml)
  @response_xml = xml
end