module Filepreviews::HTTP

@author Jonah Ruiz <jonah@pixelhipsters.com> Contains http helper module

Constants

BASE_URL
USER_AGENT

Public Instance Methods

api_keys?() click to toggle source

Returns API Keys status @return [Boolean] for when API keys are configured

# File lib/filepreviews/http.rb, line 34
def api_keys?
  !!(Filepreviews.api_key && Filepreviews.secret_key)
end
configure_api_auth_header(connection_headers) click to toggle source

Configures API Authentication header @param connection_headers [Faraday::Connection] header block @return [Faraday::Connection] 'Authorization' header

# File lib/filepreviews/http.rb, line 48
def configure_api_auth_header(connection_headers)
  if api_keys?
    connection_headers['Authorization'] = generate_auth_key
  end
end
configure_logger(connection) click to toggle source

Configures logger @param connection [Faraday::Connection] connection block

# File lib/filepreviews/http.rb, line 56
def configure_logger(connection)
  connection.response :logger
end
default_connection(url = BASE_URL, debug = false) click to toggle source

Returns custom Typhoeus connection configuration @param url [String] API url to be used as base @param debug [Boolean] flag to log responses into STDOUT @return [Typhoeus::Connection] configured http client for requests to API

# File lib/filepreviews/http.rb, line 22
def default_connection(url = BASE_URL, debug = false)
  Faraday.new(url: url) do |conn|
    conn.adapter :typhoeus
    conn.headers[:user_agent] = USER_AGENT
    conn.headers[:content_type] = 'application/json'
    configure_api_auth_header(conn.headers)
    configure_logger(conn) if debug
  end
end
fetch(params, endpoint_path = 'previews') click to toggle source

Returns parsed response from API @return [Filepreviews::Response] json response as callable methods

# File lib/filepreviews/http.rb, line 76
def fetch(params, endpoint_path = 'previews')
  options = prepare_request(params)
  response = default_connection(BASE_URL, params.debug)
               .post do |req|
                req.url("/v2/#{endpoint_path}/")
                 req.body = JSON.generate(options)
               end

  parse(response.body)
end
generate_auth_key() click to toggle source

Configures API HTTP Basic Authentication @return [String] HTTP Auth string for header

# File lib/filepreviews/http.rb, line 40
def generate_auth_key
  key = Base64.encode64("#{Filepreviews.api_key}:#{Filepreviews.secret_key}").gsub(/\n/, '')
  "Basic #{key}"
end
parse(response_body) click to toggle source

Returns callable methods from parsed JSON response @param response_body [String<JSON>] stringified version of json response @return [Filepreviews::Response] json response as callable methods

# File lib/filepreviews/http.rb, line 90
def parse(response_body)
  Filepreviews::Response.new(JSON.parse(response_body))
end
prepare_request(params) click to toggle source

Returns processed metadata, and image attributes params @param params [Hash<Symbol>] metadata and image attributes @return [Hash<Symbol>] processed parameters

# File lib/filepreviews/http.rb, line 63
def prepare_request(params)
  request = process_params(params)
  request.store(:sizes, [extract_size(params.size)]) if params.size
  request.store(:format, params.format) if params.format
  request.store(:data, params.data) if params.data
  request.store(:uploader, params.uploader) if params.uploader
  request.store(:pages, params.pages) if params.pages
  request.store(:callback_url, params.callback_url) if params.callback_url
  request
end