class Algolia::Analytics

def add_ab_test(ab_test)

def add_ab_test(ab_test)
  perform_request(:POST, Protocol.ab_tests_uri, {}, ab_test.to_json)
end

def delete_ab_test(ab_test_id)

def delete_ab_test(ab_test_id)
  raise ArgumentError.new('ab_test_id cannot be empty') if ab_test_id.nil? || ab_test_id == ''
  perform_request(:DELETE, Protocol.ab_tests_uri(ab_test_id))
end

def get_ab_test(ab_test_id)

def get_ab_test(ab_test_id)
  raise ArgumentError.new('ab_test_id cannot be empty') if ab_test_id.nil? || ab_test_id == ''
  perform_request(:GET, Protocol.ab_tests_uri(ab_test_id))
end

def get_ab_tests(params = {})

def get_ab_tests(params = {})
  params = {
    :offset => 0,
    :limit => 10,
  }.merge(params)
  perform_request(:GET, Protocol.ab_tests_uri, params)
end

def initialize(client, params)

def initialize(client, params)
  @client   = client
  @headers  = params[:headers]
end

def perform_request(method, url, params = {}, data = {})

def perform_request(method, url, params = {}, data = {})
  http = HTTPClient.new
  url = API_URL + url
  encoded_params = Hash[params.map { |k, v| [k.to_s, v.is_a?(Array) ? v.to_json : v] }]
  url << "?" + Protocol.to_query(encoded_params)
  response = case method
             when :GET
               http.get(url, { :header => @headers })
             when :POST
               http.post(url, { :body => data, :header => @headers })
             when :DELETE
               http.delete(url, { :header => @headers })
             end
  if response.code / 100 != 2
    raise AlgoliaProtocolError.new(response.code, "Cannot #{method} to #{url}: #{response.content}")
  end
  JSON.parse(response.content)
end

def stop_ab_test(ab_test_id)

def stop_ab_test(ab_test_id)
  raise ArgumentError.new('ab_test_id cannot be empty') if ab_test_id.nil? || ab_test_id == ''
  perform_request(:POST, Protocol.ab_tests_stop_uri(ab_test_id))
end

def wait_task(index_name, taskID, time_before_retry = WAIT_TASK_DEFAULT_TIME_BEFORE_RETRY, request_options = {})

def wait_task(index_name, taskID, time_before_retry = WAIT_TASK_DEFAULT_TIME_BEFORE_RETRY, request_options = {})
  @client.wait_task(index_name, taskID, time_before_retry, request_options)
end