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