module FastBound::API

Constants

FILE_UPLOAD_ATTRS
ROOT_URL
USER_AGENT

Public Instance Methods

delete_request(client, endpoint) click to toggle source
# File lib/fastbound-ruby/api.rb, line 34
def delete_request(client, endpoint)
  request = Net::HTTP::Delete.new(request_url(client, endpoint))

  set_request_headers(client, request)
  submit_request(client, request)
end
get_request(client, endpoint) click to toggle source
# File lib/fastbound-ruby/api.rb, line 13
def get_request(client, endpoint)
  request = Net::HTTP::Get.new(request_url(client, endpoint))

  set_request_headers(client, request)
  submit_request(client, request)
end
post_file_request(client, endpoint, file_data) click to toggle source
# File lib/fastbound-ruby/api.rb, line 41
def post_file_request(client, endpoint, file_data)
  request = Net::HTTP::Post.new(request_url(client, endpoint))

  set_request_headers(client, request)
  submit_file_request(client, request, file_data)
end
post_request(client, endpoint, data = {}) click to toggle source
# File lib/fastbound-ruby/api.rb, line 20
def post_request(client, endpoint, data = {})
  request = Net::HTTP::Post.new(request_url(client, endpoint))

  set_request_headers(client, request, 'application/json')
  submit_request(client, request, data)
end
put_request(client, endpoint, data = {}) click to toggle source
# File lib/fastbound-ruby/api.rb, line 27
def put_request(client, endpoint, data = {})
  request = Net::HTTP::Put.new(request_url(client, endpoint))

  set_request_headers(client, request, 'application/json')
  submit_request(client, request, data)
end

Private Instance Methods

build_multipart_request_body(request, file_data, boundary) click to toggle source
# File lib/fastbound-ruby/api.rb, line 77
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
convert_params_to_request_query(params) click to toggle source
# File lib/fastbound-ruby/api.rb, line 121
def convert_params_to_request_query(params)
  params&.map { |k, v| [k.to_s.camelize(:lower), v].join('=') }&.join('&')
end
process_request(request) click to toggle source
# File lib/fastbound-ruby/api.rb, line 65
def process_request(request)
  uri = URI(request.path)
  http = Net::HTTP.new(uri.host, uri.port)

  http.use_ssl = true
  http.set_debug_output($stdout) if FastBound.config.full_debug?

  response = http.start { |_http| _http.request(request) }

  FastBound::Response.new(response)
end
request_url(client, endpoint) click to toggle source
# File lib/fastbound-ruby/api.rb, line 101
def request_url(client, endpoint)
  [ROOT_URL, client.account_number, 'api', endpoint].join('/')
end
set_request_headers(client, request, content_type = nil) click to toggle source
# File lib/fastbound-ruby/api.rb, line 94
def set_request_headers(client, request, content_type = nil)
  request['User-Agent'] = USER_AGENT
  request['Authorization'] = ['Basic', Base64.strict_encode64(client.api_key + ':')].join(' ')
  request['X-AuditUser'] = client.account_email
  request['Content-Type'] = content_type if content_type.present?
end
standardize_body_data(submitted_data, permitted_data_attrs) click to toggle source
# File lib/fastbound-ruby/api.rb, line 105
def standardize_body_data(submitted_data, permitted_data_attrs)
  protected_attr_prefixes = %w( acquire destroyed dispose location theftLoss )
  _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 do |k|
    transformed_key = k.to_s.camelize(:lower)

    if index_for_underscore = protected_attr_prefixes.find { |x| transformed_key.index(x) == 0 }&.length
      transformed_key.insert(index_for_underscore, '_')
    else
      transformed_key
    end
  end
end
submit_file_request(client, request, file_data) click to toggle source
# File lib/fastbound-ruby/api.rb, line 56
def submit_file_request(client, request, file_data)
  boundary = ::SecureRandom.hex(15)

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

  build_multipart_request_body(request, file_data, boundary)
  process_request(request)
end
submit_request(client, request, data = {}) click to toggle source
# File lib/fastbound-ruby/api.rb, line 50
def submit_request(client, request, data = {})
  request.body = data.is_a?(Hash) ? data.to_json : data

  process_request(request)
end