class Payture::Ewallet::Methods::Base

Attributes

config[R]

Public Class Methods

new(config) click to toggle source
# File lib/payture/ewallet/methods/base.rb, line 8
def initialize(config)
  @config = config
end

Public Instance Methods

call(**args) click to toggle source
# File lib/payture/ewallet/methods/base.rb, line 12
def call(**args)
  http_response = make_request(url, params(**args))
  build_response(http_response)
end

Private Instance Methods

build_response(http_response) click to toggle source
# File lib/payture/ewallet/methods/base.rb, line 45
def build_response(http_response)
  unless http_response.success?
    raise Error, "Invalid http status: #{http_response.status}"
  end

  body =
    begin
      MultiXml.parse(http_response.body).values.first
    rescue MultiXml::ParseError => e
      raise Error, "#{e.class}: #{e.message}"
    end

  response_class.new(body, currency: config.currency)
end
compact_hash(hash) click to toggle source
# File lib/payture/ewallet/methods/base.rb, line 65
def compact_hash(hash)
  hash.select { |k, v| k && v }
end
encoded_cheque(data) click to toggle source
# File lib/payture/ewallet/methods/base.rb, line 69
def encoded_cheque(data)
  return unless data

  json_data = JSON.generate(data)
  Base64.strict_encode64(json_data)
end
encoded_data(**params) click to toggle source
# File lib/payture/ewallet/methods/base.rb, line 60
def encoded_data(**params)
  params_str = compact_hash(params).map { |k, v| "#{k}=#{v}" }.join(';')
  CGI.escape(params_str)
end
make_request(url, params) click to toggle source
# File lib/payture/ewallet/methods/base.rb, line 31
def make_request(url, params)
  conn = Faraday.new do |builder|
    builder.adapter Faraday.default_adapter
    builder.request :url_encoded
    builder.response(:logger, config.logger) if config.logger
  end
  conn.get(url, compact_hash(params)) do |req|
    req.options.timeout = config.timeout if config.timeout
    req.options.open_timeout = config.open_timeout if config.open_timeout
  end
rescue Faraday::Error => e
  raise Error, "#{e.class}: #{e.message}"
end
params() click to toggle source
# File lib/payture/ewallet/methods/base.rb, line 23
def params
  raise NotImplementedError
end
response_class() click to toggle source
# File lib/payture/ewallet/methods/base.rb, line 27
def response_class
  raise NotImplementedError
end
url() click to toggle source
# File lib/payture/ewallet/methods/base.rb, line 19
def url
  raise NotImplementedError
end