class Afterbuy::API

Constants

METHOD_REQUEST_MAPPING
METHOD_RESPONSE_MAPPING

Attributes

debug_info[RW]

Public Class Methods

new(partner_id: nil, partner_password: nil, user_id: nil, user_password: nil) click to toggle source
# File lib/afterbuy/api.rb, line 16
def initialize(partner_id: nil, partner_password: nil, user_id: nil, user_password: nil)
  raise ConfigMissingPartnerIDError, 'You must provide an Afterbuy partner_id'             unless Afterbuy.config.partner_id || partner_id
  raise ConfigMissingPartnerPasswordError, 'You must provide an Afterbuy partner_password' unless Afterbuy.config.partner_password || partner_password
  raise ConfigMissingUserIDError, 'You must provide an Afterbuy user_id'                   unless Afterbuy.config.user_id || user_id
  raise ConfigMissingUserPasswordError, 'You must provide an Afterbuy user_password'       unless Afterbuy.config.user_password || user_password

  @partner_id         = Afterbuy.config.partner_id || partner_id
  @partner_password   = Afterbuy.config.partner_password || partner_password
  @user_id            = Afterbuy.config.user_id || user_id
  @user_password      = Afterbuy.config.user_password || user_password
  @api_url            = Afterbuy.config.afterbuy_api_url
  @shop_interface_url = Afterbuy.config.afterbuy_shop_interface_url
end

Public Instance Methods

call(method_name, global_params: {}, payload: {}) click to toggle source
# File lib/afterbuy/api.rb, line 30
def call(method_name, global_params: {}, payload: {})
  self.debug_info = { request_params: request_params(method_name, global_params, payload) }

  response = connection.post do |req|
    req.body = request_params(method_name, global_params, payload)
  end

  self.debug_info[:response_body] = response.body

  "Afterbuy::Representer::#{METHOD_RESPONSE_MAPPING[method_name]}ResponseRepresenter".constantize.new("Afterbuy::#{METHOD_RESPONSE_MAPPING[method_name]}Response".constantize.new).from_xml(response.body)
end
connection() click to toggle source
# File lib/afterbuy/api.rb, line 54
def connection
  @connection ||= Faraday.new(url: @api_url) do |faraday|
    faraday.headers['Content-Type'] = 'application/xml'
    faraday.adapter Faraday.default_adapter
    faraday.use Afterbuy::Middleware::ErrorDetector
  end
end
shop_interface_call(global_params: {}, request: Afterbuy::ShopInterfaceRequest.new) click to toggle source
# File lib/afterbuy/api.rb, line 42
def shop_interface_call(global_params: {}, request: Afterbuy::ShopInterfaceRequest.new)
  self.debug_info = { request_params: shop_interface_request_params(global_params, request).to_hash }

  response = shop_interface_connection.post do |req|
    req.body = shop_interface_request_params(global_params, request).to_hash
  end

  self.debug_info[:response_body] = response.body

  Afterbuy::Representer::ShopInterfaceResponseRepresenter.new(Afterbuy::ShopInterfaceResponse.new).from_xml(response.body)
end
shop_interface_connection() click to toggle source
# File lib/afterbuy/api.rb, line 62
def shop_interface_connection
  @shop_interface_connection ||= Faraday.new(url: @shop_interface_url) do |faraday|
    faraday.request  :url_encoded
    faraday.adapter Faraday.default_adapter
    faraday.use Afterbuy::Middleware::ErrorDetector
  end
end

Private Instance Methods

request_params(method_name, global_params={}, payload={}) click to toggle source
# File lib/afterbuy/api.rb, line 72
def request_params(method_name, global_params={}, payload={})
  request_params = payload.merge({
    afterbuy_global: Global.new(
      global_params.merge({
        partner_id: @partner_id,
        partner_password: @partner_password,
        user_id: @user_id,
        user_password: @user_password,
        call_name: method_name,
        detail_level: 0,
        error_language: 'EN'
      })
    )
  })

  "Afterbuy::Representer::#{METHOD_REQUEST_MAPPING[method_name]}RequestRepresenter".constantize.new(
    "Afterbuy::#{METHOD_REQUEST_MAPPING[method_name]}Request".constantize.new(request_params)
  ).to_xml
end
shop_interface_request_params(global_params={}, request=Afterbuy::ShopInterfaceRequest.new) click to toggle source
# File lib/afterbuy/api.rb, line 92
def shop_interface_request_params(global_params={}, request=Afterbuy::ShopInterfaceRequest.new)
  request.partner_id = global_params[:partner_id] || @partner_id
  request.partner_pass = global_params[:partner_pass] || @partner_password
  request.user_id = global_params[:user_id] || @user_id

  Afterbuy::Representer::ShopInterfaceRequestRepresenter.new request
end