class Mingle::HttpClient

Attributes

base_url[RW]

Public Class Methods

new(username, password) click to toggle source
# File lib/mingle/http_client.rb, line 10
def initialize(username, password)
  @username = username
  @password = password
end

Public Instance Methods

get(path, params={}) click to toggle source
# File lib/mingle/http_client.rb, line 15
def get(path, params={})
  url = File.join(base_url, path + to_url(params))
  logger.debug "HTTP GET #{url}"
  process(Net::HTTP::Get, url)
end
put(path, params={}) click to toggle source
# File lib/mingle/http_client.rb, line 21
def put(path, params={})
  url = url = File.join(base_url, path)
  body = params.delete :body
  process(Net::HTTP::Put, url, params, body)
end

Private Instance Methods

process(request_class, url, headers={}, body=nil) click to toggle source
# File lib/mingle/http_client.rb, line 38
def process(request_class, url, headers={}, body=nil)
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true if uri.scheme == 'https'

  request = request_class.new(uri.request_uri)
  request.basic_auth @username, @password
  request.body = body if body.tap { logger.debug("HTTP body: #{body}") if body }
  headers.each do |key, value|
    request[key] = value
  end

  response = http.request(request)

  response.tap do
    raise "Unexpected response of #{response.code} to #{url}" unless response.code.to_i >= 200 && response.code.to_i < 400
  end
end
to_url(params) click to toggle source
# File lib/mingle/http_client.rb, line 29
def to_url(params)
  params.inject([]) do |memo, pair|
    memo.tap do |memo|
      key, value = *pair
      memo << "#{CGI.escape(key.to_s)}=#{CGI.escape(value.to_s)}"
    end
  end.join("&").tap { |params| return "?#{params}" unless params.empty? }
end