class TestRail::APIClient

Attributes

password[RW]
user[RW]

Public Class Methods

new(base_url,user,password,proxy_url=nil,proxy_port=nil) click to toggle source
# File lib/cukerail/testrail.rb, line 26
def initialize(base_url,user,password,proxy_url=nil,proxy_port=nil)
  if !base_url.match(/\/$/)
    base_url += '/'
  end
  @url = base_url + 'index.php?/api/v2/'
  @user ||=user
  @password ||=password
  @proxy_url ||= proxy_url
  @proxy_port ||= proxy_port
end

Public Instance Methods

send_get(uri) click to toggle source

Send Get

Issues a GET request (read) against the API and returns the result (as Ruby hash).

Arguments:

uri The API method to call including parameters

(e.g. get_case/1)
# File lib/cukerail/testrail.rb, line 48
def send_get(uri) 
  _send_request('GET', uri, nil)
end
send_post(uri, data) click to toggle source

Send POST

Issues a POST request (write) against the API and returns the result (as Ruby hash).

Arguments:

uri The API method to call including parameters

(e.g. add_case/1)

data The data to submit as part of the request (as

Ruby hash, strings must be UTF-8 encoded)
# File lib/cukerail/testrail.rb, line 65
def send_post(uri, data)
  _send_request('POST', uri, data)
end

Private Instance Methods

_send_request(method, uri, data) click to toggle source
# File lib/cukerail/testrail.rb, line 70
def _send_request(method, uri, data)
  Retriable.retriable multiplier: 3,tries: 5 do
    url = URI.parse(@url + uri)
    if method == 'POST'
      request = Net::HTTP::Post.new(url.path + '?' + url.query)
      request.body = JSON.dump(data)
    else
      request = Net::HTTP::Get.new(url.path + '?' + url.query)
    end
    request.basic_auth(@user, @password)
    request.add_field('Content-Type', 'application/json')

    conn = Net::HTTP.new(url.host, url.port,@proxy_url,@proxy_port)

    if url.scheme == 'https'
      conn.use_ssl = true
      conn.verify_mode = OpenSSL::SSL::VERIFY_NONE
    end
    response = conn.request(request)

    if response.body && !response.body.empty?
      result = JSON.parse(response.body)
    else
      result = {}
    end

    if response.code != '200'
      if result && result.key?('error')
        error = '"' + result['error'] + '"'
      else
        error = 'No additional error message received'
      end
      raise APIError.new('TestRail API returned HTTP %s (%s)' %
                         [response.code, error])
    end

    result
  end
end