module Credova::API

Constants

API_VERSION
DEVELOPMENT_URL
FILE_UPLOAD_ATTRS
PRODUCTION_URL
USER_AGENT

Public Instance Methods

get_request(endpoint, headers = {}) click to toggle source
# File lib/credova/api.rb, line 17
def get_request(endpoint, headers = {})
  request = Net::HTTP::Get.new(request_url(endpoint))

  submit_request(request, {}, headers)
end
post_file_request(endpoint, file_data, headers = {}) click to toggle source
# File lib/credova/api.rb, line 29
def post_file_request(endpoint, file_data, headers = {})
  request = Net::HTTP::Post.new(request_url(endpoint))

  submit_file_request(request, file_data, headers)
end
post_request(endpoint, data = {}, headers = {}) click to toggle source
# File lib/credova/api.rb, line 23
def post_request(endpoint, data = {}, headers = {})
  request = Net::HTTP::Post.new(request_url(endpoint))

  submit_request(request, data, headers)
end

Private Instance Methods

auth_header(token) click to toggle source
# File lib/credova/api.rb, line 88
def auth_header(token)
  { 'Authorization' => ['Bearer', token].join(' ') }
end
build_multipart_request_body(request, file_data, boundary) click to toggle source
# File lib/credova/api.rb, line 65
def build_multipart_request_body(request, file_data, boundary)
  file_type     = file_data[:file_type]
  file_contents = file_data[:file_contents]
  file_name     = file_data[:file_name] || "ffl-document.#{file_type}"
  content_type  = "application/#{file_data[:file_type]}"

  body = []
  body << "--#{boundary}\r\n"
  body << "Content-Disposition: form-data; name=\"file\"; filename=\"#{file_name}\"\r\n"
  body << "Content-Type: #{content_type}\r\n"
  body << "\r\n"
  body << "#{file_contents}\r\n"
  body << "--#{boundary}--\r\n"

  request.body = body.join
end
content_type_header(type) click to toggle source
# File lib/credova/api.rb, line 92
def content_type_header(type)
  { 'Content-Type' => type }
end
process_request(request) click to toggle source
# File lib/credova/api.rb, line 55
def process_request(request)
  uri = URI(request.path)

  response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    http.request(request)
  end

  Credova::Response.new(response)
end
request_url(endpoint) click to toggle source
# File lib/credova/api.rb, line 96
def request_url(endpoint)
  [
    (Credova.sandbox? ? DEVELOPMENT_URL : PRODUCTION_URL),
    API_VERSION,
    endpoint,
  ].join('/')
end
set_request_headers(request, headers) click to toggle source
# File lib/credova/api.rb, line 82
def set_request_headers(request, headers)
  request['User-Agent'] = USER_AGENT

  headers.each { |header, value| request[header] = value }
end
standardize_body_data(submitted_data, permitted_data_attrs) click to toggle source
# File lib/credova/api.rb, line 104
def standardize_body_data(submitted_data, permitted_data_attrs)
  _submitted_data = submitted_data.deep_transform_keys(&:to_sym)
  permitted_data = (_submitted_data.select! { |k, v| permitted_data_attrs.include?(k) } || _submitted_data)

  permitted_data.deep_transform_keys { |k| k.to_s.camelize(:lower) }
end
submit_file_request(request, file_data, headers) click to toggle source
# File lib/credova/api.rb, line 45
def submit_file_request(request, file_data, headers)
  boundary = ::SecureRandom.hex(15)

  headers.merge!(content_type_header("multipart/form-data; boundary=#{boundary}"))

  build_multipart_request_body(request, file_data, boundary)
  set_request_headers(request, headers)
  process_request(request)
end
submit_request(request, data, headers) click to toggle source
# File lib/credova/api.rb, line 37
def submit_request(request, data, headers)
  set_request_headers(request, headers)

  request.body = data.is_a?(Hash) ? data.to_json : data

  process_request(request)
end