Module: Filepreviews::HTTP

Includes:
Utils
Defined in:
lib/filepreviews/http.rb

Overview

Contains http helper module

Author:

Constant Summary collapse

BASE_URL =
'https://api.filepreviews.io'
USER_AGENT =
"Filepreviews-Rubygem/#{Filepreviews::VERSION}"

Class Method Summary collapse

Methods included from Utils

#extract_metadata, #extract_size, included, #process_params, #validate_pages

Class Method Details

.api_keys?Boolean

Returns API Keys status

Returns:

  • (Boolean)

    for when API keys are configured



34
35
36
# File 'lib/filepreviews/http.rb', line 34

def api_keys?
  !!(Filepreviews.api_key && Filepreviews.secret_key)
end

.configure_api_auth_header(connection_headers) ⇒ Faraday::Connection

Configures API Authentication header

Parameters:

  • connection_headers (Faraday::Connection)

    header block

Returns:

  • (Faraday::Connection)

    ‘Authorization’ header



48
49
50
51
52
# 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) ⇒ Object

Configures logger

Parameters:

  • connection (Faraday::Connection)

    connection block



56
57
58
# File 'lib/filepreviews/http.rb', line 56

def configure_logger(connection)
  connection.response :logger
end

.default_connection(url = BASE_URL, debug = false) ⇒ Typhoeus::Connection

Returns custom Typhoeus connection configuration

Parameters:

  • url (String) (defaults to: BASE_URL)

    API url to be used as base

  • debug (Boolean) (defaults to: false)

    flag to log responses into STDOUT

Returns:

  • (Typhoeus::Connection)

    configured http client for requests to API



22
23
24
25
26
27
28
29
30
# 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') ⇒ Filepreviews::Response

Returns parsed response from API

Returns:



76
77
78
79
80
81
82
83
84
85
# 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_keyString

Configures API HTTP Basic Authentication

Returns:

  • (String)

    HTTP Auth string for header



40
41
42
43
# 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) ⇒ Filepreviews::Response

Returns callable methods from parsed JSON response

Parameters:

  • response_body (String<JSON>)

    stringified version of json response

Returns:



90
91
92
# File 'lib/filepreviews/http.rb', line 90

def parse(response_body)
  Filepreviews::Response.new(JSON.parse(response_body))
end

.prepare_request(params) ⇒ Hash<Symbol>

Returns processed metadata, and image attributes params

Parameters:

  • params (Hash<Symbol>)

    metadata and image attributes

Returns:

  • (Hash<Symbol>)

    processed parameters



63
64
65
66
67
68
69
70
71
72
# 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