class ReeHttp::BuildRequest

def add_form_data(request, form_data)

def add_form_data(request, form_data)
  array_form_data = []
  form_data.each_pair do |k, v|
    array_form_data << [k.to_s, v]
  end
  request.set_form([*array_form_data], "multipart/form-data", charset: "UTF-8")
  request
end

def call(method, url, **opts)

def call(method, url, **opts)
  unless opts[:body].nil?
    unless  opts[:form_data].nil?
      raise ArgumentError, "You can't use body argument with form_data argument"
    end
  end
  opts = DEFAULTS.merge(opts)
  uri = URI(url)
  uri.scheme = opts[:force_ssl] ? HTTPS_STR : uri.scheme
  if DEFAULT_PROTOCOL_PORTS.include?(uri.port)
    uri.port = opts[:force_ssl] ? HTTPS_PORT : uri.port
  end
  q_string = opts[:query_params] ? URI.encode_www_form(opts[:query_params]) : nil
  uri.query = if uri.query.nil?
    q_string
  else
    if not_blank(q_string)
      uri.query + '&' + q_string.to_s
    else
      uri.query
    end
  end
  request =
    case method
    when :get then Net::HTTP::Get.new(uri)
    when :post then Net::HTTP::Post.new(uri)
    when :put then Net::HTTP::Put.new(uri)
    when :delete then Net::HTTP::Delete.new(uri)
    when :patch then Net::HTTP::Patch.new(uri)
    when :head then Net::HTTP::Head.new(uri)
    when :options then Net::HTTP::Options.new(uri)
    else
      raise ArgumentError, "Unavailable rest method"
    end
  unless opts[:body].nil?
    request.body =
      case opts[:body]
      when Hash then to_json(opts[:body])
      when File then opts[:body].read
      else
        opts[:body]
      end
  end
  unless opts[:form_data].nil?
    request = add_form_data(request, opts[:form_data])
  end
  opts[:headers].each do |k, v|
    request.add_field k, v
  end
  unless opts[:basic_auth].nil?
    request.basic_auth(opts[:basic_auth][:username], opts[:basic_auth][:password])
  end
  unless opts[:bearer_token].nil?
    request.add_field "Authorization", generate_bearer_auth(opts[:bearer_token])
  end
  request
end

def generate_bearer_auth(token)

def generate_bearer_auth(token)
  "Bearer " + token.to_s
end