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 7
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 11
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 15
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 19
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 61
def body_from_response(response, method, content_type)
  case response
  when Net::HTTPRedirection
    redirect_url = response['location']
    uri = URI.parse(redirect_url)
    host_with_scheme = [uri.scheme,uri.host].join('://')
    request(method, uri.request_uri, {}, content_type, host_with_scheme)
  else
    response.body
  end
end
hash_to_query_string(hash) click to toggle source
# File lib/gems/request.rb, line 54
def hash_to_query_string(hash)
  hash.keys.inject('') do |query_string, key|
    query_string << '&' unless key == hash.keys.first
    query_string << "#{URI.encode(key.to_s)}=#{URI.encode(hash[key])}"
  end
end
request(method, path, data, content_type, request_host = host) click to toggle source
# File lib/gems/request.rb, line 25
def request(method, path, data, content_type, request_host = host)
  path = [path, hash_to_query_string(data)[/.+/]].compact.join('?') if [: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 [:post, :put].include? method
  when 'application/octet-stream'
    request.body = data
    request.content_length = data.size
  end
  connection = Net::HTTP.new uri.host, uri.port
  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