lib/airborne/rest_client_requester.rb
require 'rest_client'
module Airborne
module RestClientRequester
def make_request(method, url, options = {})
headers = base_headers.merge(options[:headers] || {})
verify_ssl = options.fetch(:verify_ssl, true)
res = if method == :post || method == :patch || method == :put || method == :delete
begin
request_body = options[:body].nil? || is_empty(options[:body]) ? '' : options[:body]
request_body = request_body.to_json if is_json_request(headers) && !is_empty(request_body)
RestClient::Request.execute(
method: method,
url: get_url(url),
payload: request_body,
headers: headers,
verify_ssl: verify_ssl
) { |response, request, result| response }
rescue RestClient::Exception => e
e.response ? e.response : e.original_exception
end
else
begin
RestClient::Request.execute(
method: method,
url: get_url(url),
headers: headers,
verify_ssl: verify_ssl
) { |response, request, result| response }
rescue RestClient::Exception => e
e.response ? e.response : e.original_exception
end
end
res
end
private
def is_json_request(headers)
header = headers.fetch(:content_type)
header == :json || /application\/([a-zA-Z0-9\.\_\-]*\+?)json/ =~ header
end
def is_empty(body)
return body.empty? if body.respond_to?(:empty?)
false
end
def base_headers
{ content_type: :json }.merge(Airborne.configuration.headers || {})
end
end
end