class Emojidex::Service::Transactor

API transaction utility

Public Class Methods

api_url() click to toggle source
# File lib/emojidex/service/transactor.rb, line 76
def self.api_url()
  "#{@@settings[:api][:protocol]}://#{@@settings[:api][:host]}#{@@settings[:api][:prefix]}"
end
cdn_url() click to toggle source
# File lib/emojidex/service/transactor.rb, line 80
def self.cdn_url()
  "#{@@settings[:cdn][:protocol]}://#{@@settings[:cdn][:host]}#{@@settings[:cdn][:prefix]}"
end
connect() click to toggle source
# File lib/emojidex/service/transactor.rb, line 61
def self.connect
  return @@connection if @@connection
  @@connection = Faraday.new do |conn|
    conn.request :url_encoded
    #conn.request :retry, max: @@retries, interval: 0.05, interval_randomness: 0.5,
    #              backoff_factor: 2
    # conn.response :logger
    conn.headers['Accept'] = 'application/msgpack'
    conn.use FaradayMiddleware::FollowRedirects, limit: 5
    conn.adapter :typhoeus #Faraday.default_adapter
  end
  _kludge_certs if Gem.win_platform?
  @@connection
end
delete(endpoint, params = {}) click to toggle source
# File lib/emojidex/service/transactor.rb, line 46
def self.delete(endpoint, params = {})
  response = connect.delete(
    "#{api_url}#{endpoint}", params)

  _status_raiser(response)
  _datafy_json(response.body)
end
download(file_subpath) click to toggle source
# File lib/emojidex/service/transactor.rb, line 54
def self.download(file_subpath)
  connect.get(URI.escape("#{cdn_url}#{file_subpath.tr(' ', '_')}"))
rescue Faraday::ConnectionFailed
  _kludge_certs
  connect.get(URI.escape("#{cdn_url}#{file_subpath.tr(' ', '_')}"))
end
get(endpoint, params = {}) click to toggle source
# File lib/emojidex/service/transactor.rb, line 31
def self.get(endpoint, params = {})
  response = connect.get(
    "#{api_url}#{URI.encode(endpoint)}", params)
  _status_raiser(response)
  _datafy_json(response.body)
end
post(endpoint, params = {}) click to toggle source
# File lib/emojidex/service/transactor.rb, line 38
def self.post(endpoint, params = {})
  response = connect.post(
    "#{api_url}#{endpoint}", params)

  _status_raiser(response)
  _datafy_json(response.body)
end

Private Class Methods

_datafy_json(body) click to toggle source
# File lib/emojidex/service/transactor.rb, line 104
def self._datafy_json(body)
  begin
    body = MessagePack.unpack(body)
    data = JSON.parse(body.to_json, symbolize_names: true)
  rescue JSON::ParserError
    raise Error::InvalidJSON, 'could not parse JSON'
  end
  data
end
_extract_status_line(response) click to toggle source
# File lib/emojidex/service/transactor.rb, line 99
def self._extract_status_line(response)
  data = _datafy_json(response.body)
  data.fetch(:status, '')
end
_kludge_certs() click to toggle source
# File lib/emojidex/service/transactor.rb, line 114
def self._kludge_certs
  cert_loc = "#{__dir__}/cacert.pem"
  unless File.exist? cert_loc
    response = @@connection.get('http://curl.haxx.se/ca/cacert.pem')
    File.open(cert_loc, 'wb') { |fp| fp.write(response.body) }
  end
  ENV['SSL_CERT_FILE'] = cert_loc
end
_status_raiser(response) click to toggle source
# File lib/emojidex/service/transactor.rb, line 86
def self._status_raiser(response)
  case response.status
  when 200..299
    return # don't raise
  when 401
    fail Error::Unauthorized, _extract_status_line(response)
  when 402
    fail Error::PaymentRequired, _extract_status_line(response)
  when 422
    fail Error::UnprocessableEntity _extract_status_line(response)
  end
end