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