class Danger::CircleAPI

Public Instance Methods

client() click to toggle source
# File lib/danger/ci_source/circle_api.rb, line 30
def client
  @client ||= Faraday.new(url: "https://circleci.com/api/v1")
end
fetch_build(repo_slug, build_number, token) click to toggle source

Make the API call, and parse the JSON

# File lib/danger/ci_source/circle_api.rb, line 44
def fetch_build(repo_slug, build_number, token)
  url = "project/#{repo_slug}/#{build_number}"
  params = { "circle-token" => token }
  response = client.get url, params, accept: "application/json"
  JSON.parse(response.body, symbolize_names: true)
end
fetch_pull_request_url(repo_slug, build_number, token) click to toggle source

Ask the API if the commit is inside a PR

# File lib/danger/ci_source/circle_api.rb, line 35
def fetch_pull_request_url(repo_slug, build_number, token)
  build_json = fetch_build(repo_slug, build_number, token)
  pull_requests = build_json[:pull_requests]
  return nil unless pull_requests && pull_requests.first

  pull_requests.first[:url]
end
pull_request?(env) click to toggle source

Determine if there’s a PR attached to this commit, and return a bool

# File lib/danger/ci_source/circle_api.rb, line 7
def pull_request?(env)
  url = pull_request_url(env)
  return !url.nil?
end
pull_request_url(env) click to toggle source

Determine if there’s a PR attached to this commit, and return the url if so

# File lib/danger/ci_source/circle_api.rb, line 14
def pull_request_url(env)
  url = env["CI_PULL_REQUEST"]

  if url.nil? && !env["CIRCLE_PROJECT_USERNAME"].nil? && !env["CIRCLE_PROJECT_REPONAME"].nil?
    repo_slug = env["CIRCLE_PROJECT_USERNAME"] + "/" + env["CIRCLE_PROJECT_REPONAME"]
    if !env["CIRCLE_PR_NUMBER"].nil?
      host = env["DANGER_GITHUB_HOST"] || "github.com"
      url = "https://" + host + "/" + repo_slug + "/pull/" + env["CIRCLE_PR_NUMBER"]
    else
      token = env["DANGER_CIRCLE_CI_API_TOKEN"]
      url = fetch_pull_request_url(repo_slug, env["CIRCLE_BUILD_NUM"], token)
    end
  end
  url
end