class Coordconver::Utils::Http

Constants

DEFAULT_HEADERS
DEFAULT_OPEN_TIMEOUT
DEFAULT_READ_TIMEOUT
DEFAULT_RETRY_TIMES
DEFAULT_USER_AGENT
HTTP_VERB_MAP
RETRY_SLEEP_TIME

Public Class Methods

new(method, url, params: nil, body: nil, headers: {}, opts: {}) click to toggle source
# File lib/coordconver/utils/http.rb, line 28
def initialize(method, url, params: nil, body: nil, headers: {}, opts: {})
  method = method.downcase.to_sym
  err_msg = "http method #{method} is not supported"
  raise err_msg unless HTTP_VERB_MAP.keys.include?(method)
  @uri = URI(url)
  @uri.query = URI.encode_www_form(params) unless params.nil?
  @request = prepare_request(method, body, headers)
  @opts = opts
end

Public Instance Methods

send_request() click to toggle source
# File lib/coordconver/utils/http.rb, line 38
def send_request
  tries ||= DEFAULT_RETRY_TIMES
  opts ||= default_opts.merge @opts
  Net::HTTP.start(@uri.host, @uri.port, opts) do |http|
    http.request(@request)
  end
# if raise Timeout::Error retry it for 3 times
rescue Net::OpenTimeout, Net::ReadTimeout
  (tries -= 1).zero? ? (raise "Time out") : retry
end

Private Instance Methods

default_opts() click to toggle source
# File lib/coordconver/utils/http.rb, line 60
def default_opts
  {
    use_ssl: 'https' == @uri.scheme,
    open_timeout: DEFAULT_OPEN_TIMEOUT,
    read_timeout: DEFAULT_READ_TIMEOUT
  }
end
prepare_request(method, body, headers) click to toggle source
# File lib/coordconver/utils/http.rb, line 51
def prepare_request(method, body, headers)
  headers = DEFAULT_HEADERS.merge(headers)
  request = HTTP_VERB_MAP[method].new @uri
  request.initialize_http_header(headers)
  request.body = body.to_json unless body.nil?
  request
end