class Buyatabwrapper::API

Constants

CALLS

Attributes

config[RW]
result[RW]

Public Class Methods

new() click to toggle source
# File lib/buyatabwrapper/api.rb, line 37
def initialize
  self.result = Result.new
  self.config = parse_config_file
end

Public Instance Methods

send_request(type, params) click to toggle source
# File lib/buyatabwrapper/api.rb, line 42
def send_request(type, params)
  return result unless config

  request = Net::HTTP::Post.new(CALLS[type][:url], initheader = {'Content-Type' => 'application/json'})
  request.body = default_params(type).merge(params).to_json

  http = Net::HTTP.new(config.host, 443).tap do |http|
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
  response = http.request(request)
  response = JSON.parse(response.body)["d"]

  if response["Status"]["Success"]
    if type == :get_merchants
      self.result = response['Merchants']
    else
      result.response = OpenStruct.new(
        id: response['BATOrderNumber'],
        url: response['Links'].first,
        card_number: response['CardNumbers'].first,
        pin_number: response['CardPins'].first
      )
      result.successful! 
    end
  else
    result.response = response["Status"]['Error']['Message']
  end

  result
end

Private Instance Methods

default_params(type) click to toggle source
# File lib/buyatabwrapper/api.rb, line 76
def default_params(type)
  {
    username: config.user_name, 
    password: config.password,
    apitoken: config.api_token
  }.merge(CALLS[type][:default_params])
end
parse_config_file() click to toggle source
# File lib/buyatabwrapper/api.rb, line 84
def parse_config_file
  file = Rails.root.join("config").join("buyatabwrapper.yml")
  data = YAML.load(ERB.new(IO.read(file)).result)[Rails.env] rescue nil

  result.response = 'Provide configs in buyatabwrapper.yml file' unless data

  data ? OpenStruct.new(data) : data
end