module Lipseys::API

Constants

FILE_UPLOAD_ATTRS
ROOT_API_URL
USER_AGENT

Public Instance Methods

get_request(endpoint, headers = {}) click to toggle source
# File lib/lipseys/api.rb, line 14
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/lipseys/api.rb, line 26
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/lipseys/api.rb, line 20
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/lipseys/api.rb, line 85
def auth_header(token)
  { 'Token' => token }
end
build_multipart_request_body(request, file_data, boundary) click to toggle source
# File lib/lipseys/api.rb, line 62
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/lipseys/api.rb, line 89
def content_type_header(type)
  { 'Content-Type' => type }
end
process_request(request) click to toggle source
# File lib/lipseys/api.rb, line 52
def process_request(request)
  uri = URI(request.path)

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

  Lipseys::Response.new(response)
end
request_url(endpoint) click to toggle source
# File lib/lipseys/api.rb, line 93
def request_url(endpoint)
  [ROOT_API_URL, endpoint].join('/')
end
set_request_headers(request, headers) click to toggle source
# File lib/lipseys/api.rb, line 79
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/lipseys/api.rb, line 97
def standardize_body_data(submitted_data, permitted_data_attrs)
  _submitted_data = submitted_data.deep_transform_keys(&:to_sym)
  permitted_data = {}

  _submitted_data.each do |k1, v1|
    if permitted_data_attrs.include?(k1)
      if v1.is_a?(Array)
        permitted_data[k1] = []

        v1.each do |sub_data|
          permitted_sub_data = {}
          sub_data.each { |k2, v2| permitted_sub_data[k2] = v2 if permitted_data_attrs.include?(k2) }
          permitted_data[k1] << permitted_sub_data
        end
      else
        permitted_data[k1] = v1
      end
    end
  end

  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/lipseys/api.rb, line 42
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/lipseys/api.rb, line 34
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