class CodeClimateClient

Public Class Methods

new(config) click to toggle source
# File lib/integrations/code_climate_client.rb, line 8
def initialize(config)
  @api_key = config["api_key"]
  @org_id = config["org_id"]
  @repo_id = config["repo_id"]
end

Public Instance Methods

issues() click to toggle source
# File lib/integrations/code_climate_client.rb, line 14
def issues()
  snapshot = last_snapshot_id()
  request("repos/#{@repo_id}/snapshots/#{snapshot}/issues")["data"]
    .reduce({}) do |obj, issue|
      file = issue.dig("attributes", "location", "path")

      obj[file] ||= {
        issues: []
      }

      obj[file][:issues] << {
        categories: issue.dig("attributes", "categories"),
        description: issue.dig("attributes", "description"),
        severity: issue.dig("attributes", "severity"),
        remediation_points: issue.dig("attributes", "remediation_points"),
        start_line: issue.dig("attributes", "location", "start_line"),
        end_line: issue.dig("attributes", "location", "end_line"),
      }

      obj
    end
end
scores() click to toggle source
# File lib/integrations/code_climate_client.rb, line 37
def scores()
  snapshot = last_snapshot_id()
  request("repos/#{@repo_id}/snapshots/#{snapshot}/files")["data"]
    .reduce({}) do |obj, file|
      path = file.dig("attributes", "path")
      obj[path] ||= {}
      obj[path][:gpa] ||= file.dig("attributes", "rating")
      obj
    end
end

Private Instance Methods

headers() click to toggle source
# File lib/integrations/code_climate_client.rb, line 73
def headers()
  {
    "Accept" => "application/vnd.api+json",
    "Authorization" => "Token token=#{@api_key}"
  }
end
last_snapshot_id() click to toggle source
# File lib/integrations/code_climate_client.rb, line 50
def last_snapshot_id()
  @last_snapshot_id ||= ref_points()["data"]
    .map { |ref_point| ref_point["relationships"]["snapshot"] }
    .select { |snap_shot| snap_shot }
    .first["data"]["id"]
end
ref_points() click to toggle source
# File lib/integrations/code_climate_client.rb, line 57
def ref_points()
  request("repos/#{@repo_id}/ref_points")
end
request(path) click to toggle source
# File lib/integrations/code_climate_client.rb, line 61
def request(path)
  uri = URI.parse("https://api.codeclimate.com/v1/#{path}")

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  request = Net::HTTP::Get.new(uri.request_uri)
  request.initialize_http_header(headers())

  JSON.parse(http.request(request).body)
end