class Payture::Cheques::Methods::Base

Attributes

config[R]

Public Class Methods

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

Public Instance Methods

call(**args) click to toggle source
# File lib/payture/cheques/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/cheques/methods/base.rb, line 48
def build_response(http_response)
  unless http_response.success?
    raise Error, "Invalid http status: #{http_response.status}"
  end

  body =
    begin
      JSON.parse(http_response.body)
    rescue JSON::ParserError => e
      raise Error, "#{e.class}: #{e.message}"
    end

  config.logger.debug(body) if config.logger
  response_class.new(body)
end
compact_hash(hash) click to toggle source
# File lib/payture/cheques/methods/base.rb, line 69
def compact_hash(hash)
  hash.select { |k, v| k && v }
end
encoded_data(**params) click to toggle source
# File lib/payture/cheques/methods/base.rb, line 64
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/cheques/methods/base.rb, line 31
def make_request(url, params)
  conn = Faraday.new do |builder|
    builder.request :url_encoded
    builder.response(:logger, config.logger) if config.logger
    builder.adapter Faraday.default_adapter
  end
  conn.post(url) do |req|
    req.headers['Content-Type'] = 'application/json'
    req.body = compact_hash(params).to_json
    config.logger.debug(req.body) if config.logger
    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/cheques/methods/base.rb, line 23
def params
  raise NotImplementedError
end
response_class() click to toggle source
# File lib/payture/cheques/methods/base.rb, line 27
def response_class
  raise NotImplementedError
end
url() click to toggle source
# File lib/payture/cheques/methods/base.rb, line 19
def url
  raise NotImplementedError
end