class Teamlab::Request

Public Class Methods

new(api_additive) click to toggle source
# File lib/teamlab/request.rb, line 12
def initialize(api_additive)
  @api_additive = api_additive.to_s
end

Public Instance Methods

delete(*args) click to toggle source
# File lib/teamlab/request.rb, line 28
def delete(*args)
  request(:delete, args)
end
get(*args) click to toggle source
# File lib/teamlab/request.rb, line 20
def get(*args)
  request(:get, args)
end
post(*args) click to toggle source
# File lib/teamlab/request.rb, line 16
def post(*args)
  request(:post, args)
end
put(*args) click to toggle source
# File lib/teamlab/request.rb, line 24
def put(*args)
  request(:put, args)
end

Private Instance Methods

generate_request_url(command) click to toggle source
# File lib/teamlab/request.rb, line 51
def generate_request_url(command)
  Teamlab.config.server + Teamlab.config.api_path + @api_additive + command
end
parse_args(args, type) click to toggle source
# File lib/teamlab/request.rb, line 55
def parse_args(args, type)
  command = args.first.instance_of?(Array) ? '/' + args.shift.join('/') : args.shift.to_s
  opts = {}
  opts[:body] = args.last.instance_of?(Hash) ? args.pop : {}
  opts[:headers] = Teamlab.config.headers
  if opts[:body].key?(:somefile)
    opts[:query] = opts.delete(:body)
    opts[:detect_mime_type] = true
  end
  opts[:query] = opts.delete(:body) if type == :get
  [command, opts]
end
request(type, args) click to toggle source
# File lib/teamlab/request.rb, line 34
def request(type, args)
  command, opts = parse_args(args, type)
  url = URI.encode(generate_request_url(command))
  attempts = 0
  begin
    response = Teamlab::Response.new(HTTMultiParty.send(type, url, opts))
  rescue TimeoutError => timeout_exception
    attempts += 1
    retry if attempts < 3
    raise "Can't #{type} to #{url} because of TimeoutError: #{timeout_exception}"
  rescue Exception => e
    raise e
  end
  fail "Error #{response.code}: #{response.error}" unless response.success
  response
end