class RakeCircleCI::Client

Public Class Methods

new(opts) click to toggle source
# File lib/rake_circle_ci/client.rb, line 7
def initialize(opts)
  @base_url = opts[:base_url]
  @api_token = opts[:api_token]
  @project_slug = opts[:project_slug]
end

Public Instance Methods

create_checkout_key(type) click to toggle source
# File lib/rake_circle_ci/client.rb, line 90
def create_checkout_key(type)
  type_strings = {
      deploy_key: 'deploy-key',
      github_user_key: 'github-user-key'
  }
  body = JSON.dump(type: type_strings[type.to_sym] || type.to_s)
  assert_successful(
      Excon.post(checkout_keys_url, body: body, headers: headers))
end
create_env_var(name, value) click to toggle source
# File lib/rake_circle_ci/client.rb, line 25
def create_env_var(name, value)
  body = JSON.dump(name: name, value: value)
  assert_successful(
      Excon.post(env_vars_url, body: body, headers: headers))
end
create_ssh_key(private_key, opts = {}) click to toggle source
# File lib/rake_circle_ci/client.rb, line 50
def create_ssh_key(private_key, opts = {})
  body = {
      fingerprint: SSHKey.new(private_key).sha1_fingerprint,
      private_key: private_key,
  }
  body = body.merge(hostname: opts[:hostname]) if opts[:hostname]
  body = JSON.dump(body)
  assert_successful(
      Excon.post(ssh_keys_url, body: body, headers: headers))
end
delete_checkout_key(fingerprint) click to toggle source
# File lib/rake_circle_ci/client.rb, line 100
def delete_checkout_key(fingerprint)
  assert_successful(
      Excon.delete(checkout_key_url(fingerprint), headers: headers))
end
delete_checkout_keys() click to toggle source
# File lib/rake_circle_ci/client.rb, line 105
def delete_checkout_keys
  checkout_keys = find_checkout_keys
  checkout_keys.each do |checkout_key|
    delete_checkout_key(checkout_key[:fingerprint])
  end
end
delete_env_var(name) click to toggle source
# File lib/rake_circle_ci/client.rb, line 31
def delete_env_var(name)
  assert_successful(Excon.delete(env_var_url(name), headers: headers))
end
delete_env_vars() click to toggle source
# File lib/rake_circle_ci/client.rb, line 35
def delete_env_vars
  env_vars = find_env_vars
  env_vars.each do |env_var|
    delete_env_var(env_var)
  end
end
delete_ssh_key(fingerprint, opts = {}) click to toggle source
# File lib/rake_circle_ci/client.rb, line 61
def delete_ssh_key(fingerprint, opts = {})
  body = {
      fingerprint: fingerprint
  }
  body = body.merge(hostname: opts[:hostname]) if opts[:hostname]
  body = JSON.dump(body)
  assert_successful(
      Excon.delete(ssh_keys_url, body: body, headers: headers))
end
delete_ssh_keys() click to toggle source
# File lib/rake_circle_ci/client.rb, line 71
def delete_ssh_keys
  ssh_keys = find_ssh_keys
  ssh_keys.each do |ssh_key|
    fingerprint = ssh_key[:fingerprint]
    hostname = ssh_key[:hostname]
    options = hostname && {hostname: hostname}
    args = [fingerprint, options].compact
    delete_ssh_key(*args)
  end
end
find_checkout_keys() click to toggle source
# File lib/rake_circle_ci/client.rb, line 82
def find_checkout_keys
  response = assert_successful(
      Excon.get(checkout_keys_url, headers: headers))
  checkout_keys = JSON.parse(response.body, symbolize_names: true)

  checkout_keys
end
find_env_vars() click to toggle source
# File lib/rake_circle_ci/client.rb, line 17
def find_env_vars
  response = assert_successful(Excon.get(env_vars_url, headers: headers))
  body = JSON.parse(response.body)
  env_vars = body["items"].map { |item| item["name"] }

  env_vars
end
find_ssh_keys() click to toggle source
# File lib/rake_circle_ci/client.rb, line 42
def find_ssh_keys
  response = assert_successful(Excon.get(settings_url, headers: headers))
  body = JSON.parse(response.body, symbolize_names: true)
  ssh_keys = body[:ssh_keys]

  ssh_keys
end
follow_project() click to toggle source
# File lib/rake_circle_ci/client.rb, line 13
def follow_project
  assert_successful(Excon.post(follow_url, headers: headers))
end

Private Instance Methods

assert_successful(response) click to toggle source
# File lib/rake_circle_ci/client.rb, line 122
def assert_successful(response)
  unless response.status >= 200 && response.status < 300
    host = response.data[:host]
    path = response.data[:path]
    status = response.status
    reason = response.data[:reason_phrase]
    raise "Unsuccessful request: #{host}#{path} #{status} #{reason}"
  end
  response
end
checkout_key_url(fingerprint) click to toggle source
# File lib/rake_circle_ci/client.rb, line 160
def checkout_key_url(fingerprint)
  "#{@base_url}/v1.1/project/#{@project_slug}/checkout-key/#{fingerprint}"
end
checkout_keys_url() click to toggle source
# File lib/rake_circle_ci/client.rb, line 156
def checkout_keys_url
  "#{@base_url}/v1.1/project/#{@project_slug}/checkout-key"
end
env_var_url(name) click to toggle source
# File lib/rake_circle_ci/client.rb, line 142
def env_var_url(name)
  "#{@base_url}/v2/project/#{@project_slug}/envvar/#{name}"
end
env_vars_url() click to toggle source
# File lib/rake_circle_ci/client.rb, line 138
def env_vars_url
  "#{@base_url}/v2/project/#{@project_slug}/envvar"
end
follow_url() click to toggle source
# File lib/rake_circle_ci/client.rb, line 133
def follow_url
  "#{@base_url}/v1.1/project/#{@project_slug}/follow?" +
      "circle-token=#{@api_token}"
end
headers() click to toggle source
# File lib/rake_circle_ci/client.rb, line 114
def headers
  {
      "Circle-Token": @api_token,
      "Content-Type": "application/json",
      "Accept": "application/json"
  }
end
settings_url() click to toggle source
# File lib/rake_circle_ci/client.rb, line 146
def settings_url
  "#{@base_url}/v1.1/project/#{@project_slug}/settings?" +
      "circle-token=#{@api_token}"
end
ssh_keys_url() click to toggle source
# File lib/rake_circle_ci/client.rb, line 151
def ssh_keys_url
  "#{@base_url}/v1.1/project/#{@project_slug}/ssh-key?" +
      "circle-token=#{@api_token}"
end