Class: Afterbuy::API

Inherits:
Object
  • Object
show all
Defined in:
lib/afterbuy/api.rb

Constant Summary collapse

METHOD_REQUEST_MAPPING =
{
  'GetAfterbuyTime' => '',
  'UpdateShopProducts' => 'UpdateShopProducts'
}
METHOD_RESPONSE_MAPPING =
{
  'GetAfterbuyTime' => 'Time',
  'UpdateShopProducts' => 'UpdateShopProducts'
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(partner_id: nil, partner_password: nil, user_id: nil, user_password: nil) ⇒ API

Returns a new instance of API.



16
17
18
19
20
21
22
23
24
25
26
27
28
# 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

Instance Attribute Details

#debug_infoObject

Returns the value of attribute debug_info.



14
15
16
# File 'lib/afterbuy/api.rb', line 14

def debug_info
  @debug_info
end

Instance Method Details

#call(method_name, global_params: {}, payload: {}) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# 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

#connectionObject



54
55
56
57
58
59
60
# 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) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
# 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_connectionObject



62
63
64
65
66
67
68
# 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