class Scrutinizer::Ocular::ApiClient

Public Class Methods

new(api_url, repository_name, revision, parents, access_token) click to toggle source
# File lib/scrutinizer/ocular/api_client.rb, line 17
def initialize(api_url, repository_name, revision, parents, access_token)
  @api_url = api_url
  @repository_name = repository_name
  @revision = revision
  @parents = parents
  @access_token = access_token
  @http = create_http_service(@api_url)

  disable_net_blockers!
end

Public Instance Methods

upload(format, data) click to toggle source
# File lib/scrutinizer/ocular/api_client.rb, line 28
def upload(format, data)
  uri_str = @api_url + '/repositories/' + @repository_name + '/data/code-coverage'
  unless @access_token.nil?
    uri_str += '?access_token=' + @access_token
  end
  uri = URI.parse(uri_str)

  request = Net::HTTP::Post.new(uri.request_uri)
  request.add_field('Content-Type', 'application/json')
  request.body = {
      :revision => @revision,
      :parents => @parents,
      :coverage => {
          :format => format,
          :data => Base64.encode64(data)
      }
  }.to_json

  response = @http.request(request)

  if response.code.to_i < 200 || response.code.to_i >= 300
    raise UploadFailed.new(response), "Upload failed with status #{response.code}"
  end
end

Private Instance Methods

create_http_service(url) click to toggle source
# File lib/scrutinizer/ocular/api_client.rb, line 55
def create_http_service(url)
  uri = URI(url)
  pem_file = File.absolute_path(File.dirname(__FILE__) + '/../../../res/cacert.pem')
  pem = File.read(pem_file)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.cert = OpenSSL::X509::Certificate.new(pem)
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER

  http
end
disable_net_blockers!() click to toggle source
# File lib/scrutinizer/ocular/api_client.rb, line 67
def disable_net_blockers!
  host = URI(@api_url).host

  if defined?(WebMock)
    allow = WebMock::Config.instance.allow || []
    WebMock::Config.instance.allow = [*allow].push host
  end

  if defined?(VCR)
    VCR.send(VCR.version.major < 2 ? :config : :configure) do |c|
      c.ignore_hosts host
    end
  end
end