class Funky::Connection::Base

Private Class Methods

get_http_request(uri) click to toggle source
# File lib/funky/connections/base.rb, line 21
def self.get_http_request(uri)
  Net::HTTP::Get.new(uri.request_uri)
end
instrument(uri, request, &block) click to toggle source
# File lib/funky/connections/base.rb, line 8
def self.instrument(uri, request, &block)
  data = {
    request: request,
    method: request.method,
    request_uri: uri
  }
  if defined?(ActiveSupport::Notifications)
    ActiveSupport::Notifications.instrument 'request.funky', data, &block
  else
    block.call(data)
  end
end
json_for(uri, max_retries = 3) click to toggle source
# File lib/funky/connections/base.rb, line 52
def self.json_for(uri, max_retries = 3)
  response = response_for(get_http_request(uri), uri)
  JSON.parse(response.body, symbolize_names: true)
end
response_for(http_request, uri, max_retries = 5) click to toggle source
# File lib/funky/connections/base.rb, line 25
def self.response_for(http_request, uri, max_retries = 5)
  response = instrument(uri, http_request) do |data|
    data[:response] = Net::HTTP.start(uri.host, 443, use_ssl: true) do |http|
      http.request http_request
    end
  end

  if response.is_a? Net::HTTPSuccess
    response
  elsif response.is_a? Net::HTTPServerError
    sleep_and_retry_response_for(http_request, uri, max_retries, response.body)
  else
    raise ContentNotFound, "Error #{response.code}: #{response.body}"
  end
rescue SocketError => e
  sleep_and_retry_response_for(http_request, uri, max_retries, e.message)
end
sleep_and_retry_response_for(http_request, uri, retries, message) click to toggle source
# File lib/funky/connections/base.rb, line 43
def self.sleep_and_retry_response_for(http_request, uri, retries, message)
  if retries > 0
    sleep (6 - retries) ** 2
    response_for http_request, uri, retries - 1
  else
    raise ConnectionError, message
  end
end