class RSpec::Testrail::Client

Attributes

password[RW]
user[RW]

Public Class Methods

new(base_url, user, password) click to toggle source
# File lib/rspec/testrail/client.rb, line 27
def initialize(base_url, user, password)
  base_url += '/' unless base_url =~ %r{/\/$/}
  @url = base_url + 'index.php?/api/v2/'
  @user = user
  @password = password
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/rspec/testrail/client.rb, line 45
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/rspec/testrail/client.rb, line 62
def send_post(uri, data)
  _send_request('POST', uri, data)
end

Private Instance Methods

_send_request(method, uri, data) click to toggle source

rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity rubocop:disable Metrics/PerceivedComplexity, Metrics/MethodLength

# File lib/rspec/testrail/client.rb, line 70
def _send_request(method, uri, data)
  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)
  if url.scheme == 'https'
    conn.use_ssl = true
    conn.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
  response = conn.request(request)

  result = (response.body && !response.body.empty?) ? JSON.parse(response.body) : {}

  if response.code != '200'
    error = (result && result.key?('error')) ? result['error'] : 'No additional error \
      message received'

    raise APIError, "TestRail API returned HTTP #{response.code} (#{error})"
  end

  result
end