module Gems::Request

Public Instance Methods

delete(path, data = {}, content_type = 'application/x-www-form-urlencoded', request_host = host) click to toggle source
# File lib/gems/request.rb, line 8
def delete(path, data = {}, content_type = 'application/x-www-form-urlencoded', request_host = host)
  request(:delete, path, data, content_type, request_host)
end
get(path, data = {}, content_type = 'application/x-www-form-urlencoded', request_host = host) click to toggle source
# File lib/gems/request.rb, line 12
def get(path, data = {}, content_type = 'application/x-www-form-urlencoded', request_host = host)
  request(:get, path, data, content_type, request_host)
end
post(path, data = {}, content_type = 'application/x-www-form-urlencoded', request_host = host) click to toggle source
# File lib/gems/request.rb, line 16
def post(path, data = {}, content_type = 'application/x-www-form-urlencoded', request_host = host)
  request(:post, path, data, content_type, request_host)
end
put(path, data = {}, content_type = 'application/x-www-form-urlencoded', request_host = host) click to toggle source
# File lib/gems/request.rb, line 20
def put(path, data = {}, content_type = 'application/x-www-form-urlencoded', request_host = host)
  request(:put, path, data, content_type, request_host)
end

Private Instance Methods

body_from_response(response, method, content_type) click to toggle source
# File lib/gems/request.rb, line 66
def body_from_response(response, method, content_type)
  case response
  when Net::HTTPRedirection
    uri = URI.parse(response['location'])
    host_with_scheme = [uri.scheme, uri.host].join('://')
    request(method, uri.request_uri, {}, content_type, host_with_scheme)
  when Net::HTTPNotFound
    raise Gems::NotFound.new(response.body)
  when Net::HTTPSuccess
    response.body
  else
    raise Gems::GemError.new(response.body)
  end
end
hash_to_query_string(hash) click to toggle source
# File lib/gems/request.rb, line 60
def hash_to_query_string(hash)
  return '' if hash.empty?

  '?' + URI.encode_www_form(hash)
end
request(method, path, data, content_type, request_host = host) click to toggle source
# File lib/gems/request.rb, line 26
def request(method, path, data, content_type, request_host = host) # rubocop:disable AbcSize, CyclomaticComplexity, MethodLength, ParameterLists, PerceivedComplexity
  path += hash_to_query_string(data) if %i[delete get].include? method
  uri = URI.parse [request_host, path].join
  request_class = Net::HTTP.const_get method.to_s.capitalize
  request = request_class.new uri.request_uri
  request.add_field 'Authorization', key if key
  request.add_field 'Connection', 'keep-alive'
  request.add_field 'Keep-Alive', '30'
  request.add_field 'User-Agent', user_agent
  request.basic_auth username, password if username && password
  request.content_type = content_type
  case content_type
  when 'application/x-www-form-urlencoded'
    request.form_data = data if %i[post put].include? method
  when 'application/octet-stream'
    request.body = data
    request.content_length = data.size
  end
  proxy = uri.find_proxy
  @connection = if proxy
    Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password).new(uri.host, uri.port)
  else
    Net::HTTP.new uri.host, uri.port
  end
  if uri.scheme == 'https'
    require 'net/https'
    @connection.use_ssl = true
    @connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
  @connection.start
  response = @connection.request request
  body_from_response(response, method, content_type)
end